如何在调用中修改Ruby中的现有代码块?

时间:2011-12-13 23:51:51

标签: ruby

如果我有这个课程的样本:

class Item
   def initialize
      @i = 10
   end
   def value
      @i ++ 1
   end
end

# initialize the class
i = Item.new

如果我们调用p i.value,我们会得到11.当我们运行它而不是11时,是否可以以某种方式修改此调用以获得12?

3 个答案:

答案 0 :(得分:1)

不确定我是否理解。你是说这个吗?

class Item
   def initialize
      @i = 10
   end
   def value
      @i += 1
   end
end

i = Item.new
i.value # 11
i.value # 12
i.value # 13

或者你想做元编程?

def i.value
   "whatever"
end

#or maybe this?

class Item 
   def value
       "whatever"
   end
end

答案 1 :(得分:1)

您发布的代码不可能

您可以使用以下代码执行此操作:

class Item
   def initialize
      @i = 10
   end

   def value(j = 1) # use default parameter
      @i ++ j # it's same as @i + j
   end
end

i = Item.new
i.value => 11
i.value 2 => 12

OR

class Item
   def initialize
      @i = 10
   end

   def i=(value)
     @i = value
   end

   def value
      @i + 1
   end
end
obj = Item.new
obj.i = 11
p obj.value # => 12

答案 2 :(得分:0)

将来电链接到succ

puts i.value.succ
# => 12