gpt4 book ai didi

object - 在 Lua 中制作和使用对象样式模块

转载 作者:行者123 更新时间:2023-12-02 09:06:22 25 4
gpt4 key购买 nike

我一直在尝试使用 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 = secondaryCard() 但当我打印两个变量时 second 偶尔会产生 。老实说我迷路了。这是实际的模块本身。

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 之前就已经开始使用 Lua,但更习惯于 Java。我只是想知道我是否以及如何才能使这项工作成功。在大多数情况下,它都有效,只是偶尔出现 nil 值。

最佳答案

问题是您已将 index 变量声明为模块顶层的本地变量。这意味着您在第一次 drawCard() 中计算的 index 随机值将在第二次调用 newDeck() 时重复使用。您可以在 newDeck() 的开头添加 print(index) 来看看我的意思。

有多种方法可以解决这个问题。一种方法是在 newDeck() 顶部添加 index = 0。更好的方法是声明具有较小作用域的变量,即使 index 对于使用它的每个函数都是本地的。

关于object - 在 Lua 中制作和使用对象样式模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com