我一直在尝试在 Lua 中使用一个模块并用它来模仿一个对象。即我做了一副纸牌:
local Card = require("Card")
local function firstCard()
Card.newDeck()
Card.drawCard()
return Card.getCard()
end
local function secondCard()
Card.newDeck()
Card.drawCard()
return Card.getCard()
end
first = firstCard()
second = secondCard()
print(first)
print(second)
我设置了
first = firstCard()
和 second = secondCard()
但是当我打印这两个变量时 second
偶尔会结果为 nil
。老实说,我迷路了。这是实际的模块本身。local Card = {}
local deck
local value
local number, suit
local index = 0
local getCard
local getValue
function Card.newDeck()
deck = {}
value = {}
for x = 1, 13 do
if x == 1 then
number = "Ace"
elseif x == 11 then
number = "Jack"
elseif x == 12 then
number = "Queen"
elseif x == 13 then
number = "King"
else
number = x
end
for x1 = 1, 4 do
if x1 == 1 then
suit = "Clubs"
elseif x1 == 2 then
suit = "Diamonds"
elseif x1 == 3 then
suit = "Hearts"
else
suit = "Spades"
end
index = index + 1
deck[index] = number.." of "..suit
value[index] = x
end
end
end
function Card.drawCard()
index = math.random(52)
getCard = deck[index]
getValue = value[index]
end
function Card.getCard()
return getCard
end
function Card.getValue()
return getValue
end
function Card.getIndex()
return index
end
return Card
在面向对象编程方面,我对 Lua 的了解有限,老实说,我通常只将它用于计算或小游戏,以保持忙碌。我是类(class) - 我只有 16 岁。我更习惯Java,尽管我在学习 Java 之前就开始很好地使用 Lua。我只想知道我是否以及如何使这项工作发挥作用。在大多数情况下它是有效的,只是那些偶尔的
nil
值。 最佳答案
问题是您已经在模块的顶层声明了局部变量 index
。这意味着您在第一个 index
中计算的 drawCard()
的随机值将在您对 newDeck()
的第二次调用中重用。您可以在 print(index)
的开头添加 newDeck()
以了解我的意思。
有几种方法可以解决这个问题。一种是在 index = 0
的顶部添加 newDeck()
。更好的方法是用较小的范围声明变量,即使 index
对每个使用它的函数都是局部的。
关于object - 在 Lua 中制作和使用对象样式的模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27450712/