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

> if a == {} then

>>  print(a)

>> end

> 

(後記,非空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,才有比較簡潔的寫法。

沒有留言:

張貼留言

Basic Blind Chess的兩大問題

 Basic Blind Chess已經好久沒更新了, Windows版可以獲得最好的遊戲体驗, 但是Android版的,不只是比較舊, 它其實存在兩大問題: 1. 拿子移動時,顯示怪怪的,只顯示前幾個移動的殘影。 這個只有在最早的版本,沒有這個問題, 但是最早的版本實機測試時,...