【问题标题】:confused with Ruby accessor methods与 Ruby 访问器方法混淆
【发布时间】:2012-03-26 04:52:37
【问题描述】:

我真的很困惑如何在 Ruby 类中命名方法名称。如果我创建一个访问器,例如: attr_accessor :名称

它创建方法: 姓名 和 名字=

但是当我在“名称”和“=”之间使用空格调用第二种方法时,它可以工作

'n.name=' 和 'n.name =' 都有效。

我在某处读到 Ruby 忽略空格。那么,为什么我写的方法在我用空格调用时不起作用?

def 获取名称 结束

如果我这样调用,它不起作用。为什么? t.获取名称

我并不感到惊讶,因为它不起作用。但我很困惑 setter 方法 (name=) 是如何工作的?

提前致谢。

【问题讨论】:

    标签: ruby class syntax accessor


    【解决方案1】:

    Setter 在 Ruby 中是特殊的。

    事实上,定义一个以等号结尾的方法名使得该名称有资格出现在赋值的左侧。

    来自http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_classes.html

    分配在 Ruby 中定义为:

    赋值语句将其左侧(左值)的变量或属性设置为引用右侧的值(右值)。

    来自http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html

    所以n.name= 直接调用setter name=

    n.name = 正在使用这种对 setter 的特殊处理,因为它以 = 结尾,以便您可以将其用作左值(即,它可以出现在左侧)一个任务。

    【讨论】:

      【解决方案2】:

      getName 是方法的名称,所以你不能在其中包含空格,因为它认为它是两个方法或者可能是一个参数,这就是为什么我们用 camal case 让它可读。但是等号是一个操作数,它周围可以有空格。它与说'2 + 2'和'2 + 2'相同。 希望有帮助

      【讨论】:

      • 但在 setter 中,= 是方法名的一部分。不是吗?
      • 在 Ruby 中,变量名和方法名应该小写,单词之间用下划线分隔。强烈建议不要使用驼峰式大小写,类名除外。
      猜你喜欢
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多