如何仅使用实例名称返回值

时间:2015-02-11 06:41:51

标签: ruby

我有一个名为Test的班级。我创建了一个实例:

example = Test.new

我想在输入时输入一个值:

example

我知道在输入时如何返回值:

example.give_me_some_stuff

但我无法弄清楚如何覆盖实例名称并返回一些值,最好是类内部方法的结果。

编辑:

这适用于返回字符串的方法,但我无法从类的实例返回实例变量。例如,这是我正在尝试做的测试:

  def test_push
    stack = Stack.new
    stack.push(10)
    binding.pry
    refute stack.empty?
  end

这是我的班级:

class Stack
  attr_accessor :contents

  def inspect
    @contents
  end

  def initialize
     @contents = []
  end

  def push(n)
    @contents << n
  end

end

在测试中,我的对象返回:

#<Stack:0x007f8cd9051938 @contents=[10]>

当我希望它只返回@contents的值时。

2 个答案:

答案 0 :(得分:2)

example始终返回您的对象。如果它将返回另一个对象,example.give_me_some_stuff将不再起作用。

也许你正在寻找inspect。打印对象时,IRB会调用inspect

class Test
  def inspect
    "I am Test"
  end
end

IRB会议:

irb(main):001:0> example = Test.new
=> I am Test
irb(main):002:0> example
=> I am Test

答案 1 :(得分:0)

你的意思是这个吗?:

Test = Struct.new('Test', :a, :b)
example = Test.new(1, 2)
example.instance_eval do
  def give_me_some_stuff
    a + b
  end
end

example.give_me_some_stuff #=> 3
another_example = Test.new(1, 2)
# => #<struct Struct::Test a=1, b=2>
another_example.give_me_some_stuff
#=> NoMethodError: undefined method `give_me_some_stuff' for #<struct Struct::Test a=1, b=2>