Ruby以不同的方式处理大写名称的方法

时间:2016-03-08 01:17:36

标签: ruby

这是一个简单的例子

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方法?

1 个答案:

答案 0 :(得分: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'