2

2x2配列を返す長いコードブロックの結果にメンバー変数を割り当てたいと思います。これはコンストラクターで行われます。しかし、コンストラクターで行う場合、

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

次に、そのブロックのコードの最初の行のみが@fooに割り当てられます。メソッドを定義すると、コンパイル中に不明なメソッドエラーが発生します。これは、どのインスタンスを呼び出すかがわからないため、理にかなっています。'self'はコンストラクターにあるので、まだインスタンスがないので、私は'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 に答える