ruby - 用于声明左值/右值 = 运算符的 Ruby 语法
问题描述
我正在尝试在 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
=> #<A:0x00007fc2293ec338>
2.5.0 :028 > a.public_datum = 7
=> 7
2.5.0 :029 > a.public_datum
=> nil
声明这样一组函数的正确语法是什么?
解决方案
使用 为裸字赋值时secret_datum = what
,您总是在设置一个简单的局部变量。
看来您实际上想使用类的设置器(然后设置实例变量)。为此,您必须向 Ruby 提示您要调用该方法。您可以通过定义接收器对象来做到这一点。因此,您的 setter 可以如下所示:
def public_datum=(what)
self.secret_datum = what
end
或者,您可以直接设置实例变量,如下所示:
def public_datum=(what)
@secret_datum = what
end
最后一点,请注意您的secret_datum
访问者仍然是公开的。因此,您也可以调用a.secret_datum = 7
,它的工作方式完全相同。
推荐阅读
- accessibility - IAccessible、IAccessible2、UIAutomation 和 MSAA 有什么区别?
- jetty - 运行同一应用程序的多个实例,每个实例都在使用相同码头的不同端口上
- c++ - 如何使用其定义附近的显式长度/值构造函数初始化向量成员变量?
- c# - 如何创建 Spring Animation 并将其应用于 UWP 控件?
- java - 如何用随机数和一些条件制作一个数组?
- javascript - 在单个画布的元素数组中添加 Click 事件
- reactjs - 在获取之前立即渲染函数调用
- bash - 是否可以在不支持关联数组的情况下编译 Bash 5?
- java - @JSONUnwrapped 关于嵌入式字段展平问题
- python - python pandas openpyxl 消失的值