这是一个简单的例子
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
方法?
答案 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'