4

あるクラスが別のクラスと同じ動作をするプログラムをレールで書いています。唯一の違いは@secret_num、2 つのクラス間で異なる方法で計算されるクラス変数 があることです。特定のスーパー クラス メソッドを呼び出したいのですが、子クラスのクラス変数を使用します。注意が必要なのは、クラス変数が定数ではないため、独自のメソッド内で設定していることです。以下でやろうとしていることを行う方法はありますか? ありがとう

Class Foo
  def secret
    return [1,2,3].sample
  end

  def b
    @secret_num = secret
    ... # lots of lines of code that use @secret_num
  end
end

Class Bar < Foo
  def secret
    return [4, 5, 6].sample
  end

  def b
    super    # use @secret_num from class Bar.
  end
end    

superへの呼び出しが親クラスのsecretメソッド、つまりも呼び出すため、これは機能しませんFoo#secretが、子クラスからの秘密の番号、つまり を使用する必要がありますBar#secret

4

1 に答える 1

4
class Foo
  def secret
    [1,2,3].sample
  end

  def b(secret_num = secret)
    <lots of lines of code that use secret_num>
  end
end

class Bar < Foo
  def secret
    [4, 5, 6].sample
  end
end    

secretに引数として渡す必要はないことに注意してくださいb。サブクラスで再定義しない限りb、継承によって の正しい実装が呼び出されますsecret

私の好みは、テストでさまざまな値を渡すことができるように、引数として使用することです。

于 2012-09-18T14:01:25.023 に答える