我想将一个成员变量分配给一个返回2x2数组的冗长代码块的结果。这将在构造函数中完成。但如果我在构造函数中,
def initialize
@foo = ...
...
end
然后只将该块中的第一行代码分配给@foo。如果我定义一个方法,那么我在编译期间会得到一个未知的方法错误,这是有道理的,因为它不知道调用它的实例。我不认为我可以做'自我',因为它在构造函数中所以还没有实例。
我不想在类定义中使用代码块,我希望将它整齐地封装在某个地方。类方法需要使其他变量可用于该方法,该变量应属于每个实例。
答案 0 :(得分:1)
您可以使用dpassage的解决方案,但我认为解决此问题的更常见方法是使用辅助函数。
class Bar
def initialize
@foo = helper
end
def helper
#do stuff
end
end
答案 1 :(得分:0)
如果我理解你要做什么,你应该能够这样做:
def initialize
@foo = begin
...
end
end
@foo
的值应该是begin...end
块中最后一行代码的结果。
答案 2 :(得分:0)
如果在实际定义数组之前有冗长的“准备”代码,只需将数组赋值放在冗长的部分之后:
def initialize
# some lengthy code
# ...
@foo = something_using_the_result_from_the_lengthy_code
end
或者如果冗长的代码在数组的赋值内,那么你应该没有问题:
def initialize
@foo = [
# lengthy code to assign the array
]
end