我的第一个带有哈希的ruby程序遇到了问题。我收到错误说
'throw':未定义的局部变量或.......
的方向'方向'
class Die
directions = {
north: 1,
south: 2,
east: 3,
west: 4
}
def throw
direction = directions.select{ |key ,value | value == rand(4)+1}
puts direction
end
end
Dice = Die.new
Dice.throw
我如何解决此错误?
Ruby-mine在哈希方向下有一条Z字形线,并提供删除分配的选项为什么会这样?
“钥匙”下还有一个锯齿形,并提供将其转换为“阻止”为什么会这样?
答案 0 :(得分:1)
它与范围有关。方法体在实例的范围/上下文中运行,但类定义在其自己的范围内运行。您可以在initialize方法中使用实例变量并将哈希值初始化为@directions
,但在您的情况下,哈希值可能不会更改,因此我建议使用常量。在Ruby中,这些声明就像变量一样,但是当第一个字符是大写时,它们就是常量。
可能因为变量从未使用过,原因如(1)所述
key
也从未使用过,你可以通过使用以下划线(_key
)开头的变量名来忽略它,或者只使用下划线也可以。我喜欢使用第一种形式,所以当我稍后回到这段代码时,我知道那里有什么。
由于更好的可读性,它可能希望您将其转换为块。
完整代码:
class Die
DIRECTIONS = {
north: 1,
south: 2,
east: 3,
west: 4
}
def throw
direction = DIRECTIONS.select do |_key, value|
value == rand(4)+1
end
puts direction
end
end