首页 > 解决方案 > 用于声明左值/右值 = 运算符的 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 

声明这样一组函数的正确语法是什么?

标签: ruby

解决方案


使用 为裸字赋值时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,它的工作方式完全相同。


推荐阅读