将成员变量分配给Ruby中的代码块的结果

时间:2012-10-30 02:55:49

标签: ruby constructor

我想将一个成员变量分配给一个返回2x2数组的冗长代码块的结果。这将在构造函数中完成。但如果我在构造函数中,

def initialize
@foo = ...
       ...
end

然后只将该块中的第一行代码分配给@foo。如果我定义一个方法,那么我在编译期间会得到一个未知的方法错误,这是有道理的,因为它不知道调用它的实例。我不认为我可以做'自我',因为它在构造函数中所以还没有实例。

我不想在类定义中使用代码块,我希望将它整齐地封装在某个地方。类方法需要使其他变量可用于该方法,该变量应属于每个实例。

3 个答案:

答案 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