作者:ssben_530 | 来源:互联网 | 2022-11-30 19:23
我试图在Ruby中构建一个equals函数.我想做的就是这样,假设我们有一个名为A的类:
class A
attr_accessor :secret_datum
def public_datum
return secret_datum
end
def public_datum= what
secret_datum = what
end
end
我想要的主要是建立一个更复杂的幕后功能,具体取决于public_datum是用作左值还是右值,但我上面的代码不起作用:
2.5.0 :027 > a = A.new
=> #
2.5.0 :028 > a.public_datum = 7
=> 7
2.5.0 :029 > a.public_datum
=> nil
声明这样一组函数的正确语法是什么?
1> Holger Just..:
将值赋给裸字时secret_datum = what
,总是要设置一个简单的局部变量.
看来你实际上想要使用你的类的setter(然后设置实例变量).为此,您必须向Ruby提示您要调用该方法.您可以通过定义接收器对象来完成此操作.你的二传手看起来像这样:
def public_datum=(what)
self.secret_datum = what
end
或者,您可以直接设置实例变量,如下所示:
def public_datum=(what)
@secret_datum = what
end
最后请注意,您的secret_datum
访问者仍然是公开的.因此,你也可以打电话a.secret_datum = 7
,它将完全相同.