如何将实例变量传递给构造函数

时间:2018-02-12 20:03:41

标签: ruby

所以我有一个班级

class MyPerson
   attr_accessor :id, :first_name, :surname

   def initialize(&block)
      instance_eval &block if block_given?
   end
end

我想从另一个看起来像这个

的类创建它
class MyCallingClass
  def initialize
     @my_name_generator_object.my_surname = 'Smith'
     @my_first_name = 'Bob'
  end

  def make_my_person
     surname_temp = @my_name_generator_object.my_surname  
     first_name_temp = @my_first_name  
     my_person = MyPerson.new do
         self.surname = surname_temp
         self.first_name = first_name_temp
     end
  end
end

发生了什么

  • 如果我尝试在构造函数中将@my_name_generator传递给MyPerson,则在实例化MyPerson时不是nil,而是将值nil传递给MyPerson的初始化方法

  • 如果我尝试将@my_first_name传递给构造函数(如上所述),即使@my_first_name有值,也不会将其传递给MyPerson的initialize方法。

  • 如果我将@ my_name_generator_object.surname和@my_first_name设置为临时变量(如上面的代码中所示),那么它将按预期工作。

为什么我可以做任何事情将实例变量直接传递给构造函数?它只是看起来很混乱,必须有临时变量来使代码工作。

0 个答案:

没有答案