0

私はルビーを学んでいて、特にオブジェクト指向プログラミングで遊んでいます。私はこのPHPコードに相当するものをrubyで書き込もうとしています

    class Abc {
        $a = 1;
        $b = 4;
        $c = 0;

        function __constructor($cc) {
            $this->c = $cc
        }

        function setA($v) {
            $this->a = $v
        }

        function getSum() {
            return ($this->a + $this->b + $this->c);
        }
    }

    $m = new Abc(7);
    $m->getSum(); // 12

    $m->setA(10);
    $m->getSum(); // 21

上記のPHPに相当するものをrubyに書き込もうとしています。私の目標はクラス変数のsoemのデフォルト値を持つことであり、それをオーバーライドしたい場合は、getter/setterメソッドを呼び出すことでそれを行うことができることに注意してください。

    class Abc 
        attr_accessor :a
        def initialize cc
            @c = cc
        end

        def getSum 
            #???
        end

    end

やりたくない

Abc.new(..and pass value of a, b and c)

私の目標はデフォルト値を設定することですが、必要に応じてインスタンスごとに変更できます。

4

1 に答える 1

4
class Abc
  attr_accessor :a, :b, :c 

  def initialize a = 1, b = 4, c = 0 
    @a = a
    @b = b
    @c = c
  end

end

これは、デフォルト値としてそれぞれ1、4、および0を受け入れますが、パラメーターを渡すことでオーバーライドできます。

したがってexample = Abc.new、パラメータなしで行う場合、デフォルト値は1,4,0​​になりますが、次のことができます。

     example2 = Abc.new 5, 5 

cの値を渡さなくても、デフォルトでa = 5との値があります。b = 5c = 0

より広義には、上記のRubyコード例では、不要な場所で角かっこを使用しています。adef method_nameはブロックを開始し、aendはそれを終了します。これらは、ブラケットが他の言語で従来使用されていた方法の代わりに機能します。だからあなたの方法のためにgetSumあなたは簡単に行うことができます

def get_sum
  #your_code
end

また、 Rubyではdef getSum通常(camelCase)はdef get_sum(snake_case)になります。また、上記の例では、括弧が削除されていることに注意してください。Rubyでは必要ありません。

于 2012-11-20T02:38:20.790 に答える