class - 'o = o or {}'在Lua中做什么?

标签 class object oop lua prototype

据我从文档中了解到,我们在 Lua 中没有类。 Lua没有类的概念;每个对象都定义自己的行为并具有自己的形状。

因此,遵循基于原型(prototype)的语言(例如 Self 和 NewtonScript)的指导,在 Lua 中对类进行简单模拟会是这样的。

function Account:new (o)
      o = o or {}   
      setmetatable(o, self)
      self.__index = self
      return o
    end

我不明白的是 o = o 做了什么以及为什么我们需要使用 setmetadatatable 和下一行 index = self

它有什么作用以及为什么我们需要它们?

另外self.o = o也很好理解,但是o = o,这不会产生任何冲突吗?

https://www.lua.org/pil/16.1.html

最佳答案

A = B 或 C 是常用的习惯用法,依赖于逻辑运算符的短路计算。如果第一个操作数 B 不为 null 或 false,则 A 获取 B 的值,并且不计算另一个操作数。如果 B 为 null 或 false,则 A 获取 C 的值。

在这个习惯用法的特定应用中,当未给出参数 o 时,o 会获取新空表的默认值,因为缺少的参数计算结果为 null 值。 参数 o 是一个局部变量,因此为其分配任何内容的所有效果都将保留在 Account:new() 函数的本地。

关于class - 'o = o or {}'在Lua中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72335138/

相关文章:

python - 类的用法&&继承: am I doing wrong?

java - 如何使字符串在其他类中可用

c++ - 构造函数Initializer字段可以用类对象调用,c++

python - 在 __init__ 中定义成员与在 python 的类主体中定义它之间的区别?

java - 自定义类可以知道调用它的对象的名称吗?

java - 多对多关系的面向对象方法

java - 静态方法重载错误

python - 在 Python 中一次为一个对象分配多个属性

javascript - 允许 Vue 2 Select Component 接受一个数组来选择选项

javascript - 使用正则表达式仅获取一场匹配