我显然是Ruby的新手,并且对一般程序设计不熟悉,非常感谢您的帮助。
这是我的代码段:
class Player
attr_accessor :name, :hp
def initialize(name, hp)
@name = name
@hp = hp
end
def name
@name
end
def hp
@hp
end
end
def prompt
print "> "
end
prompt; pname = gets.chomp
player = Player.new(pname, rand(20..30))
puts "#{player.name} \:\: #{player.hp} HP"
def test
puts "#{player.name} \:\: #{player.hp} HP - IN METHOD"
end
test
运行时,结果如下:
$ ruby wtf.rb
> Test Name
Test Name :: 20 HP
wtf.rb:24:in `test': undefined local variable or method `player' for main:Object (NameError) from wtf.rb:27:in `<main>'
为什么我的呼叫在第一种情况下起作用,但在第二种情况下却不起作用?是否因为它现在正在“测试”方法中寻找新的“玩家”变量?如果是这样,我该如何从先前创建的类实例中调用一个?
谢谢!
def test
puts "#{player.name} \:\: #{player.hp} HP - IN METHOD"
end
您忘记了传递player
方法:
def test(player)
puts "#{player.name} \:\: #{player.hp} HP - IN METHOD"
end
test(player) # => player = Player.new(pname, rand(20..30)) :: 22 HP - IN METHOD
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句