Lua - 使用和不使用"self"的相同结果

好的,接下来...

我一直在尝试使用通过将"self"作为参数来声明函数的各种示例。

我对此并不完全理解,这就是我试图全面理解的原因。我是一个彻底的初学者,但我有强烈的冲动去完全掌握它。

下面的两个示例返回相同的结果,尽管在示例2中,如果我没有在函数内声明"self = {}",我需要在函数参数中放置"self"(或":")才能使其工作。这就是"self"的全部吗?

在使用"self"时还有其他含义吗?

示例1

function Character.new(x)

  self = {}

  self.name = x

  return self.name

end

a = Character

b = Character

hobbit = a.new ("Frodo")

dragon = b.new ("Smaug")

print (hobbit)

print (dragon)

示例2

Character = {}

function Character:new(x)

  self.name = x

  return self.name

end

a = Character

b = Character

hobbit = a:new ("Frodo")

dragon = b:new ("Smaug")

print (hobbit)

print (dragon)

;^) Zalokin

点赞
用户107090
用户107090

你使用全局变量,而应该创建实例。

尝试使用以下代码,它们可能会帮助您理解:

-- 示例1
print(hobbit)
printself.name)
print(dragon)
printself.name)

- - 示例2
print(hobbit)
print(Character.name)
print(dragon)
print(Character.name)
2017-10-25 23:02:41
用户2674545
用户2674545

: 可以让你在函数中访问函数所在的表格,而无需显式地传递第一个参数。它可用于定义和调用函数。

下面的示例包含一个名为 t 的表格。该表格有 3 个函数(abc)以及在键名为 greeting 下的一个字符串条目。

所有的函数/方法调用都会打印相同的字符串 "hello user"。

请注意,你仍然可以像调用普通函数一样调用方法(函数的容器表格作为第一个参数),但必须明确地将表格作为第一个参数传递。

self 参数可以随意命名,只要在函数内部使用正确的参数名就可以使用 : 调用函数(在本例中不是 self)。函数 c 就是一个例子。

它实际上就是语法糖。

local t = {}

t.greeting = "hello"

function t:a(name)
  print(self.greeting, name)
end

function t.b(self, name)
  print(self.greeting, name)
end

function t.c(myself, name)
  print(myself.greeting, name)
end

t.a(t, "user")

t:a("user")

t.b(t, "user")

t:b("user")

t.c(t, "user")

t:c("user")
2017-10-26 21:49:46