我正在学习红宝石,我特意在其中使用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)
我的目标是拥有默认值,但如果需要,可以通过实例修改它们。
答案 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 = 5
和b = 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中不需要它们。