我有一个名为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的值时。
答案 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>