关于module中的local函数
lua吧
全部回复
仅看楼主
level 3
chaosink 楼主
local M = {}
local function new(r, i) return {r = r, i = i} end
local function tostring(c)
return "(" .. c.r .. "," .. c.i .. ")"
end
return {
new= new,
tostring= tostring,
}
以上是complex.lua的内容,是一个简单的复数module。
local cpx = require "complex"
a = cpx.new(1, 2)
print(cpx.tostring(a))
以上是test.lua的内容,用来测试复数module。
我的问题是:为什么在去掉tostring()之前的local后,会报错说c的i域为nil?
2015年09月23日 05点09分 1
level 14
tostring是系统函数,你去掉local就把系统函数都给改啦,..连接字符串又会自动调用tostring,所以出问题
2015年09月23日 06点09分 2
更正一下,不是连接字符串调用tostring,是print调用了tostring。
2015年09月23日 09点09分
@ks_isaf 就算是改了系统函数,但是tostring返回的还是个字符串啊,为什么“..”连接字符串会调用tostring,就算是调用了,但为什么错误是说c的i域为nil?
2015年09月23日 09点09分
level 3
chaosink 楼主
啊,我知道是为什么了!
去掉local后,module中的tostring()替代了全局的tostring()。
报告的错误里为空的i域其实不是一个复数的域,而是module中tostring()返回的字符串的i域,该字符串作为print()的参数,print()会调用全局的tostring()来处理该字符串,而该字符串是没有i域的!
2015年09月23日 10点09分 3
1