使用instance_eval执行块

时间:2016-06-15 05:33:41

标签: ruby

我有以下课程MyClass

  class MyClass
   def initialize(&block)
     if block_given?
      self.instance_eval &block
      p "Hey #{@name}, I have a message for you: #{@message}"
     else
      #do_something else
     end
   end

  def say(message)
   @message = message
   #puts "how are you"
  end

  def to(name)
   puts self.inspect
   @name = name
  end

end

我用MyClass.new { say('Hello').to('Haseeb') }打电话给这个班级。但它让我错了。

 undefined method `to' for "Hello":String (NoMethodError).

输出应为Hey Haseeb I have a message for you: Hello

1 个答案:

答案 0 :(得分:3)

你想链接方法⇒返回一个接收者(self):

def say(message)
  @message = message
  self
end

在当前实现中,say方法返回一个字符串,并且您在返回值(to实例)上调用String方法,从而导致错误。