Lua 里对象后边冒号和点号之间区别是什么?
发布于 12 年前 作者 jiyinyiyong 11259 次浏览 最后一次编辑是 8 年前

JS 里全点号就搞定了, 在 Lua 的教程里看到个 file:seek 之类的, 这是什么意思啊?

8 回复

静态函数和成员函数的区别?

不懂ei, 怎么 Lua 还做这样的区分呢, 那有没有规律的?

@jiyinyiyong Orz,我也不懂Lua……

@jiyinyiyong PHP也类似这样: 静态函数: oo::xx() 成员函数:$oo->xx()

@leizongmin 两者怎么区分呢? 是不是说调用的模块并不是作为对象来理解了, 所以用了::?

@jiyinyiyong 我不懂lua,说说PHP那个吧: 调用静态函数oo::xx()不需要创建一个类的实例,如:

class oo {
  static function xx () {
    // 类似命名空间那样用吧
  }
  function xx2 () {
    // 这里面可以用使用$this,每个实例的$this指向是不同的 
  }
}
// xx()是静态方法,不需要创建实例即可调用:
oo::xx();
// xx2()不是静态方法,必须要创建一个实例才能调用
$oo = new oo();
$oo->xx2();
// 创建实例后,这样也可以调用xx()方法
$oo->xx();

大概应该是这样吧,我没仔细研究过

@leizongmin 例子懂了. 不过对这种语言特性表示好难理解…

大致摸清楚了, 考虑到与 JS 相似度, Lua 设计得好奇怪…

-- 成员方法的定义
function obj:method(a1, a2, ...) … end -- 等价于
function obj.method(self, a1, a2, ...) … end -- 等价于
obj.method = function (self, a1, a2, ...) … end
-- 成员方法的调用
obj:method(a1, a2, …) -- 等价于
obj.method(obj, a1, a2, ...)

参考: http://sebug.net/paper/books/lua/Lua快速入门.pdf

回到顶部