2025年11月11日 星期二

Lua的table,不能直接比較

 今天在寫

7 kyu: [BUG] XCOM-388: Mass spectrometer crashes

這一題時,
發現empty table的變數跟empty table的值用不相等比較時,
預期會是false (不相等),但其實會傳回true,
如下:

> a = {}

> if a ~= {} then

>>  print(a)

>> end

table: 0x600002bbc640

(後記,非空table比對,也是一樣)
如果要檢查,table是否空時,
可用next檢查,next()為true時,不為空table.
寫出程設題,如下:
local spectrometer = {}

function spectrometer.get_heaviest(atomic_masses)
  if atomic_masses and next(atomic_masses)then
    if #atomic_masses < 500000 then
      return math.max(table.unpack(atomic_masses))
    else
      local m = 0
      for i = 1, #atomic_masses do
        if atomic_masses[i] > m then
          m = atomic_masses[i]
        end
      end
      return m
    end
  else
    return 0
  end
end

return spectrometer
別人寫的跟我的大致類似,
除非用第三方的API,才有比較簡潔的寫法。

沒有留言:

張貼留言

Lua的table,不能直接比較

 今天在寫 7 kyu: [BUG] XCOM-388: Mass spectrometer crashes 這一題時, 發現empty table的變數跟empty table的值用不相等比較時, 預期會是false (不相等),但其實會傳回true, 如下: > a =...