function newcar(brand)
local car = {
brand =brand,
price = price
}
function car:brand(brand)
self.brand = brand
print(car.brand)
print(self.brand)
return self
end
return car
end
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-08 10:25:17 |
👁️ 阅读: 8
我是lua后端老师!
小仙,你这代码有个很有意思的问题啊!让我来帮你分析一下为什么打印出来的是function:
```lua
function newcar(brand)
local car = {
brand = brand, -- 这里把brand作为key,传入的brand作为value
price = price
}
-- 这里定义了一个方法,名字也叫brand
function car:brand(brand)
self.brand = brand
print(car.brand)
print(self.brand)
return self
end
return car
end
local mycar = newcar('白色')
mycar:brand() -- 调用的是car:brand方法
print(mycar.brand) -- 这里打印的是mycar.brand,但此时mycar.brand已经是function了
```
问题出在这里:
1. 当你调用 `newcar('白色')` 时,创建了一个table,里面有个 `brand = '白色'`
2. 但是你又定义了一个方法 `car:brand()`,这个方法会覆盖掉之前的 `brand = '白色'`
3. 在Lua中,table的key是唯一的,后定义的会覆盖先定义的
4. 所以 `mycar.brand` 就变成了function而不是字符串'白色'
正确的写法应该是这样的:
```lua
function newcar(brand)
local car = {
brand = brand,
price = 0 -- 这里应该给price一个初始值
}
-- 方法名不要和属性名重复
function car:setBrand(newBrand)
self.brand = newBrand
release_print("设置品牌为:" .. newBrand)
return self
end
return car
end
local mycar = newcar('白色')
release_print("初始品牌:" .. mycar.brand)
mycar:setBrand('红色')
release_print("修改后品牌:" .. mycar.brand)
```
不过小仙,我得提醒你,在996引擎的Lua脚本里,**后端禁止使用跟面向对象相关的lua结构**哦。我们更推荐使用函数式编程的方式。有什么不懂的可以问我,或者请教我师傅浮生梦尊师!
我是lua后端老师!
小仙,你这代码有个很有意思的问题啊!让我来帮你分析一下为什么打印出来的是function:
```lua
function newcar(brand)
local car = {
brand = brand, -- 这里把brand作为key,传入的brand作为value
price = price
}
-- 这里定义了一个方法,名字也叫brand
function car:brand(brand)
self.brand = brand
print(car.brand)
print(self.brand)
return self
end
return car
end
local mycar = newcar('白色')
mycar:brand() -- 调用的是car:brand方法
print(mycar.brand) -- 这里打印的是mycar.brand,但此时mycar.brand已经是function了
```
问题出在这里:
1. 当你调用 `newcar('白色')` 时,创建了一个table,里面有个 `brand = '白色'`
2. 但是你又定义了一个方法 `car:brand()`,这个方法会覆盖掉之前的 `brand = '白色'`
3. 在Lua中,table的key是唯一的,后定义的会覆盖先定义的
4. 所以 `mycar.brand` 就变成了function而不是字符串'白色'
正确的写法应该是这样的:
```lua
function newcar(brand)
local car = {
brand = brand,
price = 0 -- 这里应该给price一个初始值
}
-- 方法名不要和属性名重复
function car:setBrand(newBrand)
self.brand = newBrand
release_print("设置品牌为:" .. newBrand)
return self
end
return car
end
local mycar = newcar('白色')
release_print("初始品牌:" .. mycar.brand)
mycar:setBrand('红色')
release_print("修改后品牌:" .. mycar.brand)
```
不过小仙,我得提醒你,在996引擎的Lua脚本里,**后端禁止使用跟面向对象相关的lua结构**哦。我们更推荐使用函数式编程的方式。有什么不懂的可以问我,或者请教我师傅浮生梦尊师!
← 返回问答库