3

私はRubyKoansのabout_classes.rbファイルを処理していて、「inside_a_method_self_refers_to_the_taining_object」テストでレンガの壁にぶつかりました。コードは次のとおりです。

class Dog7
  attr_reader :name

  def initialize(initial_name)
    @name = initial_name
  end

  def get_self
    self
  end

  def to_s
    __
  end

  def inspect
    "<Dog named '#{name}'>"
  end
end

def test_inside_a_method_self_refers_to_the_containing_object
  fido = Dog7.new("Fido")

  fidos_self = fido.get_self
  assert_equal <Dog named 'Fido'>, fidos_self
end

だから、私はassert_equal評価の前半を後半(fidos_self)にしようとしています。irbで処理すると、fidos_selfはを返しますが<Dog named 'Fido'>、その答えの構文エラーを受け取り続けます。

私はこの同様の投稿を見ました: Ruby Koans:この戻り値の引用符はどこにありますか?fido、しかし彼の解決策(の代わりに置く<Dog named 'Fido'>)は、スタックレベルが深すぎると言って私のレーキを中止させます。

これは私を狂わせています。ここで何が欠けていますか?

4

1 に答える 1

4

これは有効な構文ではありません。何かが特定のものとしてIRBに表示されるからといって、それが文字通りであるとは限りません。メソッドは上書きされるinspectことが多く、この場合はカスタムに再マップされています。

あなたが欲しいものは:

assert_equal "<Dog named 'Fido'>", fidos_self.inspect

デフォルトでは、の結果irbはを呼び出すことによって表示されinspectます。

于 2012-10-12T15:35:07.657 に答える