about_classes.rb проверить и самостоятельно в рубине - PullRequest
3 голосов
/ 22 июня 2011

Я сейчас работаю над about_classes.rb . Я запутался в концепции проверять и как это относится к Я . Вызывает ли объект автоматический возврат inspect метода для этого объекта?

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 __, fidos_self
  end

  def test_to_s_provides_a_string_version_of_the_object
    fido = Dog7.new("Fido")
    assert_equal __, fido.to_s
  end

  def test_to_s_is_used_in_string_interpolation
    fido = Dog7.new("Fido")
    assert_equal __, "My dog is #{fido}"
  end

  def test_inspect_provides_a_more_complete_string_version
    fido = Dog7.new("Fido")
    assert_equal __, fido.inspect
  end

  def test_all_objects_support_to_s_and_inspect
    array = [1,2,3]

    assert_equal __, array.to_s
    assert_equal __, array.inspect

    assert_equal __, "STRING".to_s
    assert_equal __, "STRING".inspect
  end

Ответы [ 3 ]

1 голос
/ 25 января 2012

self и inspect не имеют особых отношений - так получилось, что учебник "Ruby koans", который вы используете, учит вас обоим одновременно.

self - это ключевое слово, которое внутри метода оценивает объект, для которого вы вызвали метод.

inspect - это метод, реализованный всеми объектами, который возвращает строковое представление объекта. to_s также возвращает строковое представление объекта.

Разница в том, что строка, возвращаемая inspect, обычно, если возможно, имитирует синтаксис Ruby, который может создать эквивалентный объект. inspect обычно используется для отладки. Строка, возвращаемая to_s, обычно больше подходит для отображения конечному пользователю.

Синтаксис "# {expression}" неявно вызывает to_s объекта, который получается в результате вычисления expression.

0 голосов
/ 14 сентября 2011

Чтобы ответить на ваш вопрос, когда вы «вызываете» объект в irb, это похоже на то, чтобы вызывать возвращаемое значение метода inspect для этого объекта.Это может или не может быть тем, что на самом деле происходит, но это единственный способ, которым вы сможете подражать этому.Попробуйте следующие примеры.

"Hello"
=> "Hello"

puts "Hello"
=> Hello

class MyClass
  def inspect
    "Hello"
  end
end

a = MyClass.new
=> Hello

a.inspect
=> "Hello"

puts a
=> Hello
0 голосов
/ 22 июня 2011

В Ruby вы не можете "вызывать объект".Inspect похож на repr () в Python - он показывает официальное отладочное строковое представление объекта.Следует отметить, что пока puts foo вызывает foo.to_s, p foo вызывает foo.inspect.

Для полноты добавлю, что вы не можете вызывать объект в Ruby - нетт эквивалент магического Питона вызов метод.

...