设置默认值

时间:2012-11-20 02:33:38

标签: ruby

我正在学习红宝石,我特意在其中使用OOPS。我试图在ruby

中编写相当于这个PHP代码
    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)

我的目标是拥有默认值,但如果需要,可以通过实例修改它们。

1 个答案:

答案 0 :(得分: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 = 5b = 5默认为c = 0

更广泛地说,在上面的Ruby代码示例中,您使用的是不需要的括号。 def method_name开始一个块,end将完成它。它们用于代替传统上在其他语言中使用括号的方式。因此,对于您的方法getSum,您只需执行

即可
def get_sum
  #your_code
end

另外,注意def getSum(camelCase)在Ruby中通常为def get_sum(snake_case)。另请注意,在上面给出的示例中,删除了括号。 Ruby中不需要它们。