2

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

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

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

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

4

3 回答 3

1

您可以使用 dpassage 的解决方案,但我认为解决此问题的更常见方法是仅使用辅助函数。

class Bar
  def initialize
    @foo = helper
  end

  def helper
    #do stuff
  end
end
于 2012-10-30T03:04:14.323 回答
0

如果我了解您要做什么,您应该可以这样做:

def initialize
  @foo = begin
    ...
  end
end

的值@foo应该是begin...end块中最后一行代码的结果。

于 2012-10-30T03:00:02.357 回答
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
于 2012-10-30T04:22:53.133 回答