所以我有一个班级
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设置为临时变量(如上面的代码中所示),那么它将按预期工作。
为什么我可以做任何事情将实例变量直接传递给构造函数?它只是看起来很混乱,必须有临时变量来使代码工作。