Re: [問題] Lua在函數中產生資料與讀取問題
※ 引述《yzugsr (Bird)》之銘言:
: ※ 引述《oohay (五黑)》之銘言:
: : 其實我在做這件事情: 把一個外部變數x丟給某個函式,讓函式幫x產生新內容.
: : 不過以下方法全都產生foo, 所以我說看到鬼!
: : 在寫程式過程中,也做過很多假設,假設函式外的物件行為如何,假設函式內的物件
: : 又是產生新實體或不產生新實體.
: 我試著釐清一下你的盲點
: 1.Lua的Table Literal會產生新的實體 (例如 a = {1,2} )
: refer to http://www.lua.org/pil/2.5.html
: Java的Array也是
: Ruby的Array, Python的List亦然
: 2.把Table當作Array使用 預設的index是從1開始
: 但是也可以從任何其他數值開始
: refer to http://www.lua.org/pil/11.1.html
的確是,因為前文所寫的程式碼只是一個化簡版本,用來描述問題的東西.
而背後真正面對的是一些已經寫了不少,結構很複雜的東西.
老實說,我無法釐清問題點在哪裏. 我列得出的程式碼恐怕只顯示一部份的問題.
以新建不新建實體來說,之前所不了解的就是在函式中似乎做出一個新實體了,
到函式外就看不見. 可是我面對真正的難題是,有一個實體,我要先丟給一個函式
產生新資料,再丟給另一個函式讀取剛產生的新資料.
遇到新實體問題了,雖然板友可以直接點出問題是在於新實體,但我該怎麼只處理
舊實體,仍是一個問題.
再看到table.insert(),插入資料的位置如果有舊資料,就會把舊資料往後推.
這可麻煩了. (所以我覺得它爛) 我只想做個簡單的欄位值替換,
但若非table.insert()不可,意思就是若有舊資料,我要先table.remove()再
table.insert().
另外就是陣列的問題. 原來Lua是以從1開始的陣列為主.
而我個人是覺得,陣列嘛,從哪開始邊號其實都沒關係;基本上我偏好從0開始編號.
後來發現原來差這一號就是個問題, 因為有個 # operator是讀出陣列 "長度";
與其說是陣列長度,我倒覺得 # 類似ASP的UBound,因為它意思是,n[#n]不是nil
但n[#n+1]是nil.
又考慮到從0開始的陣列,一個空陣列 m 的 m[0] 是nil, 一個元素的陣列的 m[0]
不是 nil. 也就是說, 當我誤以為只用 # operator就可用迴圈處理 m 每個元素時,
就錯了: #m == 0 的時候,可能表示它是個空陣列,也可能表示它是有一個元素的陣列,
因此還要多判斷 m[0] ~= nil, 才可以讀取 m[0].
在這個部份掙扎了十幾個小時,才認清楚.
這程式語言使用感與認知的差異,可能就決定了學習曲線.
我倒覺得,這學習曲線難道全要我自己買帳,而Lua自己的設計一點責任都沒有.
--
我可沒把這問題怪到阿匾頭上.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.71.148
※ 編輯: oohay 來自: 61.231.71.148 (02/10 03:57)
→
02/10 04:02, , 1F
02/10 04:02, 1F
→
02/10 04:03, , 2F
02/10 04:03, 2F
推
02/10 04:23, , 3F
02/10 04:23, 3F
→
02/10 04:23, , 4F
02/10 04:23, 4F
→
02/10 04:24, , 5F
02/10 04:24, 5F
→
02/10 04:24, , 6F
02/10 04:24, 6F
→
02/10 04:25, , 7F
02/10 04:25, 7F
推
02/10 09:05, , 8F
02/10 09:05, 8F
→
02/10 09:06, , 9F
02/10 09:06, 9F
推
02/10 10:52, , 10F
02/10 10:52, 10F
推
02/13 16:42, , 11F
02/13 16:42, 11F
推
02/14 12:46, , 12F
02/14 12:46, 12F
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章