2

私は現在、実用的なスタジオコースを行っています。これは、演習の1つで作成したコードです。コードを実行すると、呼び出す予定のメソッドに加えて、オブジェクト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)がコンソールに出力される理由がわかりません。ありがとう!

4

3 に答える 3

2

関数は文字列を返す必要がありますが、実際には次の結果を返しているためです。puts "something"

代わりにこれを行います:

def w00t
 @health += 15
 "#{@fname} got w00ted"
end

次に、puts obj.w00tを実行すると、アクションが実行され、文字列が返されます。

于 2012-04-30T23:06:24.437 に答える
0

Rubyのすべてのメソッドは値を返すため、#blamメソッドは何かを返します。この場合、これは最後の式の値です。つまり、putsを呼び出した結果であり、nilです。したがって、puts larry.blamプットするときは、最後のステートメント、プット、したがってnilのリターンを返します。

于 2012-04-30T23:05:52.283 に答える
0

いくつか削除するだけputsです。メソッドはすべてをstdoutに出力し、その結果を出力します。

于 2012-04-30T23:10:37.200 に答える