我经常将方法的结果分配给初始化程序中的实例变量:
class MyExample
def initialize
@my_var = test_method
end
def test_method
# does something
end
end
在initialize
而不是方法中执行此操作似乎是一个特殊的memoization案例。我这样做是为了避免显式调用方法,这使我的代码更具可读性。我还想确保该方法仅针对实例调用一次。
我没有找到看起来像这样的代码。
答案 0 :(得分:0)
如果只需要将方法的结果放入实例变量而不在类的实例上显式调用方法,那么您的方法是合理的。如果你的方法体不是太长,你甚至可以在初始化器中内联它。
如果您希望只调用一次方法,则可以执行以下操作:
def test_method
return if @your_method_has_been_called.nil?
@test_method_has_been_called = true
#perform your operations
end
但是,如果您只关心操作只执行一次(可能是一项昂贵的操作),那么您可以在方法中使用|| = operator并在那里设置实例变量而不是在初始化程序内部。例如:
class MyExample
def initialize
test_method
end
def test_method
@my_var ||= 1+1 # Replace your operation here
end
end
在任何一种情况下,由于您不希望通过您的方法公开您的结果,因此最好将其作为私有方法。