2

「RubyTheHardWayを学ぶ」を進めていますが、オブジェクト内でメソッドを呼び出すことについて質問があります。誰かがこれに光を当てることができることを願っています。

コードは次のとおりです。

def play()
  next_room = @start

  while true
    puts "\n--------"
    room = method(next_room)
    next_room = room.call()
  end
end

whileこの方法のループが、ゲームをさまざまな領域に継続させるものであることを私は知っています。私の質問は、なぜそれが機能room.call()するために最初に渡されなければならないnext_roomのですか?なぜroom.call()ゲームを次のエリアに進めないのですか?

私はこれを自分でテストしましたが、なぜこのように機能しないのかわかりません。

4

2 に答える 2

4

next_room次の部屋を特定するために呼び出されるメソッドに名前を付ける記号です。部屋の方法の1つを見ると、次のようになります。

def central_corridor()
  #...
  if action == "shoot!"
    #...
    return :death

したがって、@start = :central_corridorthen inplayで開始すると、next_roomはとして開始され、ループ:central_corridorの最初のイテレータは次のようになります。while

room = method(next_room) # Look up the method named central_corridor.
next_room = room.call()  # Call the central_corridor method to find the next room.

room.call()発生したときに撮影することを選択したとすると、:death最終的にはになりnext_roomます。次に、ループの次の反復でdeathメソッドを検索してroom = method(next_room)実行します。

methodメソッドはシンボルをメソッドに変換するために使用され、次にそのnext_roomメソッドが呼び出されて次に何が起こるかを調べます。次の部分で何が起こるかは、の戻り値から来ていますroom。したがって、各部屋はメソッドで表され、それらのメソッドは次の部屋を表すメソッドの名前を返します。

于 2012-09-11T04:04:39.167 に答える
0

これは私が作成した単純なコードです。printステートメントを使用すると、method(next_room)とroom.call()の機能を視覚化できます。

def printThis()
  puts "thisss"
end

next_room = "printThis"
print "next_room is:  ", next_room; puts


room = method(next_room)
print "room is:  ", room; puts

room.call()
于 2014-05-04T01:31:11.277 に答える