【问题标题】:Ruby treats method with uppercase name differently [duplicate]Ruby以不同的方式对待具有大写名称的方法[重复]
【发布时间】:2016-03-08 01:17:36
【问题描述】:

这是一个简单的例子

class Foo
  def self.lowercase
    puts "lowercase"
  end

  def self.Uppercase
    puts "uppercase method"
  end
end

Foo::lowercase
Foo::Uppercase

这个输出:

lowercase
foo.rb:12:in `<main>': uninitialized constant Foo::Uppercase (NameError)

为什么 Ruby 找不到 Uppercase 方法?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    为什么 Ruby 找不到 Uppercase 方法?

    因为它认为它是一个常数。 :: 是常量分辨率运算符。它也适用于消息发送这一事实在混淆编程竞赛之外并没有真正有用。

    如果您想将其视为消息发送,则必须通过传递空参数列表或使用标准消息发送语法向 Ruby 明确您的意思是消息发送:

    Foo::Uppercase()
    Foo.Uppercase
    

    您还能如何访问命名空间为Uppercase 的常量Foo

    注意,这类似于局部变量:

    def foo; 'method' end
    
    foo #=> 'method'
    
    foo = 'variable'
    
    foo #=> 'variable'
    
    foo() #=> 'method'
    
    self.foo #=> 'method'
    

    【讨论】:

    • “它也适用于消息发送这一事实在混淆编程竞赛之外并没有真正有用。”或者可能是在面试候选人和寻找 Ruby “专家”方面的错误尝试。不管怎样,哈哈。
    • 您提到与局部变量的相似性可能会造成混淆。正如我链接的问题中所述,常量和局部变量是不同的。你的答案就更清楚了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多