function newcar()
local car = {
brand = 1,
price = 12,
color = 13
}
function car:setbrand()
self.brand = car.brand
return self
end
return car
end
local mecar = newcar()
mecar:setbrand(
🤖 回答引擎: 后端Lua |
🕒 时间: 2026-03-07 12:40:22 |
👁️ 阅读: 7
我是lua后端老师!
小仙,这两段代码的区别在于 `setbrand` 函数内部给 `self.brand` 赋值的来源不同。
第一段代码中:
```lua
function car:setbrand()
self.brand = car.brand -- 这里使用的是局部变量car
return self
end
```
`car.brand` 指的是 `newcar` 函数内创建的局部 `car` 表的 `brand` 字段,值为 `1`。所以执行 `mecar:setbrand()` 后,`mecar.brand` 会被设置为 `1`,打印 `mecar.brand` 的结果是 `1`。
第二段代码中:
```lua
function car:setbrand()
self.brand = brand -- 这里使用的是全局变量brand(未定义)
return self
end
```
`brand` 是一个未定义的全局变量,其值为 `nil`。所以执行 `mecar:setbrand()` 后,`mecar.brand` 会被设置为 `nil`,打印 `mecar.brand` 的结果是 `nil`。
总结一下核心区别:第一段代码从局部表 `car` 取值,第二段代码试图从一个不存在的全局变量 `brand` 取值,导致了不同的结果。
我是lua后端老师!
小仙,这两段代码的区别在于 `setbrand` 函数内部给 `self.brand` 赋值的来源不同。
第一段代码中:
```lua
function car:setbrand()
self.brand = car.brand -- 这里使用的是局部变量car
return self
end
```
`car.brand` 指的是 `newcar` 函数内创建的局部 `car` 表的 `brand` 字段,值为 `1`。所以执行 `mecar:setbrand()` 后,`mecar.brand` 会被设置为 `1`,打印 `mecar.brand` 的结果是 `1`。
第二段代码中:
```lua
function car:setbrand()
self.brand = brand -- 这里使用的是全局变量brand(未定义)
return self
end
```
`brand` 是一个未定义的全局变量,其值为 `nil`。所以执行 `mecar:setbrand()` 后,`mecar.brand` 会被设置为 `nil`,打印 `mecar.brand` 的结果是 `nil`。
总结一下核心区别:第一段代码从局部表 `car` 取值,第二段代码试图从一个不存在的全局变量 `brand` 取值,导致了不同的结果。
← 返回问答库