作者oohay (五黑)
看板Programming
标题Re: [问题] Lua在函数中产生资料与读取问题
时间Sun Feb 10 03:52:12 2008
※ 引述《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)
1F:→ poga:话说Lua不是数一数二好学的嘛...220.140.114.237 02/10 04:02
2F:→ poga:oh 忘记阁下在CPP的表现,有此战果并不意外220.140.114.237 02/10 04:03
3F:推 yzugsr:Lua超好学 +1 =.= 123.193.35.97 02/10 04:23
4F:→ yzugsr:我在想怎麽都没人跑出来讲他好学.. 123.193.35.97 02/10 04:23
5F:→ yzugsr:Lua我觉得是弱在syntax sugar少 123.193.35.97 02/10 04:24
6F:→ yzugsr:OO写起来很讨厌、Library太少 123.193.35.97 02/10 04:24
7F:→ yzugsr:不会想拿Lua兜一个大的infrastructure 123.193.35.97 02/10 04:25
8F:推 abcdefghi:想不到在CPP百年难得一见的PL人才,居然 140.113.23.107 02/10 09:05
9F:→ abcdefghi:连lua都搞不定,一定是lua太烂了! 140.113.23.107 02/10 09:06
10F:推 shelary:您的学习态度真好.跟杜正胜一样可当教长 125.231.120.20 02/10 10:52
11F:推 yoco315:来写 python 啦 140.114.78.40 02/13 16:42
12F:推 asoedarren:嫌难用就不要用啦 我用得超爽 59.124.38.114 02/14 12:46