0

我正在学习 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)

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

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 = 5b = 5with 的值c = 0

更广泛地说,在上面的 Ruby 代码示例中,您在不需要的地方使用了括号。adef method_name开始一个块,aend将完成它。它们代替了传统上在其他语言中使用括号的方式。所以对于你的方法getSum,你可以简单地做

def get_sum
  #your_code
end

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

于 2012-11-20T02:38:20.790 回答