。 vs ::(点对双冒号)调用方法
可能重复:
在Ruby中什么意思?
我正在从Ruby的Poignant指南中学习Ruby,在一些代码示例中,我遇到了用于相同目的的双冒号和圆点的使用:
File::open( 'idea-' + idea_name + '.txt', 'w' ) do |f| f << idea end
在上面的代码中,正在使用双冒号访问File
类的open
方法。 不过,后来我发现代码中使用了一个点来达到同样的目的:
require 'wordlist' # Print each idea out with the words fixed Dir['idea-*.txt'].each do |file_name| idea = File.read( file_name ) code_words.each do |real, code| idea.gsub!( code, real ) end puts idea end
这一次,正在使用一个点来访问File
类的read
方法。 有什么区别:
File.read()
和
File::open()
这是范围parsing运算符 。
维基百科的一个例子:
module Example Version = 1.0 class << self # We are accessing the module's singleton class def hello(who = "world") "Hello #{who}" end end end #/Example Example::hello # => "Hello world" Example.hello "hacker" # => "Hello hacker" Example::Version # => 1.0 Example.Version # NoMethodError # This illustrates the difference between the message (.) operator and the scope # operator in Ruby (::). # We can use both ::hello and .hello, because hello is a part of Example's scope # and because Example responds to the message hello. # # We can't do the same with ::Version and .Version, because Version is within the # scope of Example, but Example can't respond to the message Version, since there # is no method to respond with.