Setter无法使用 - =,+ =等?

 飞翔的10号 发布于 2023-01-12 15:54

我不明白为什么我得到一个零错误.我正确地创建了setter.但它不接受 - =,+ =,或者它自身在=运算符后面.为什么?

class Test
  def var; @var || 0; end
  def var=(value)
    @var = value
  end

  def initialize
    @var = 2.4 # Sample value
  end

  def test
    puts var
    var -= 1 # <<< crash: undefined method for nil class
    puts var
    var = var - 1 # <<< crash: undefined method for nil class
    puts var
  end
end

a = Test.new
a.test

Arup Rakshit.. 5

写为

def test
    puts var
    self.var -= 1
    puts var
    self.var = var - 1
    puts var
end

如果你不使用self,那么Ruby会将它们var视为局部变量,而不是setter方法调用.

请记住,在Ruby 方法中,永远不能在没有接收器(隐式/显式)的情况下进行调用.现在,如果你写var = 1,Ruby将视为局部变量赋值.但是如果你写的话self.var,Ruby会将它解析为方法调用,如果你定义的话,会尝试调用你的setter方法.还记得self.var = 1是一个语法糖self.var=(1).

有关同样的更有趣的讨论,值得一读的私人制定者可以被自己称呼,为什么不吸气?

最近发现一个关于私人制定者的错误.这是Bug票证,它现在也已修复.

1 个回答
  • 写为

    def test
        puts var
        self.var -= 1
        puts var
        self.var = var - 1
        puts var
    end
    

    如果你不使用self,那么Ruby会将它们var视为局部变量,而不是setter方法调用.

    请记住,在Ruby 方法中,永远不能在没有接收器(隐式/显式)的情况下进行调用.现在,如果你写var = 1,Ruby将视为局部变量赋值.但是如果你写的话self.var,Ruby会将它解析为方法调用,如果你定义的话,会尝试调用你的setter方法.还记得self.var = 1是一个语法糖self.var=(1).

    有关同样的更有趣的讨论,值得一读的私人制定者可以被自己称呼,为什么不吸气?

    最近发现一个关于私人制定者的错误.这是Bug票证,它现在也已修复.

    2023-01-12 15:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有