在Ruby中使用:: operator定义一个方法的含义是什么?

时间:2011-01-31 07:51:16

标签: ruby

例如:

class A
   def A::f
   end
end

什么是A :: f? 我想它既不是类方法也不是实例方法......

2 个答案:

答案 0 :(得分:3)

使用双冒号创建一个类方法。你可以通过一个简单的测试来看到这个:

class A 
  def A::f 
    puts "Called A::f"
  end 
end

puts "A.public_methods:"
puts A.public_methods(false)
puts

a = A.new

puts "a.public_methods:"
puts a.public_methods(false)
puts

puts "Attempt to call f"
A.f
a.f

输出:

A.public_methods:
f
allocate
new
superclass

a.public_methods:

Attempt to call f
Called A::f
NoMethodError: undefined method ‘f’ for #<A:0x0000010084f020>

答案 1 :(得分:1)