我目前正在做实用的工作室课程,这是我为其中一个练习编写的一些代码。当我运行代码时,除了我打算调用的方法之外,我还得到一个对象id。练习创建了一个游戏,您可以使用blam或w00t方法增加或减少玩家的健康状况。
class Player ##creates a player class
attr_accessor :fname, :lname, :health
def initialize fname, lname, health=100
@fname, @lname, @health = fname.capitalize, lname.capitalize, health
end
def to_s
#defines the method to introduce a new player
#replaces the default to_s method
puts "I'm #{@fname} with a health of #{@health}."
end
def blam #the method for a player to get blammed?
@health -= 10
puts "#{@fname} got blammed!"
end
def w00t #the method for a player getting wooted
@health += 15
puts "#{@fname} got w00ted"
end
end
larry = Player.new("larry","fitzgerald",60)
curly = Player.new("curly","lou",125)
moe = Player.new("moe","blow")
shemp = Player.new("shemp","",90)
puts larry
puts larry.blam
puts larry
puts larry.w00t
puts larry
我的输出如下:
I'm Larry with a health of 60.
#<Player:0x10e96d6d8>
Larry got blammed!
nil
I'm Larry with a health of 50.
#<Player:0x10e96d6d8>
Larry got w00ted
nil
I'm Larry with a health of 65.
#<Player:0x10e96d6d8>
我无法弄清楚为什么在运行代码时将对象id(或nil)打印到控制台。 谢谢!
答案 0 :(得分:2)
因为你的函数应该返回字符串,但它们实际上是返回puts "something"
改为:
def w00t
@health += 15
"#{@fname} got w00ted"
end
然后当你执行puts obj.w00t
时,它将执行操作,并返回字符串。
答案 1 :(得分:0)
Ruby中的每个方法都返回一个值,所以#blam方法会返回一些东西。在这种情况下,它是最后一个表达式的值:调用puts的结果,即nil。因此,当你puts larry.blam
放置最后一个语句的回报时,put,因此为nil。
答案 2 :(得分:0)
只需删除一些puts
即可。您的方法在stdout上打印所有内容,然后打印它们的结果。