我有点好奇要知道,以下两种方法之间有什么区别吗?
使用self在类方法中调用类方法
class Test
def self.foo
puts 'Welcome to ruby'
end
def self.bar
self.foo
end
end
Run Code Online (Sandbox Code Playgroud)
Test.bar #欢迎来到红宝石
在没有self的类方法中调用类方法
class Test
def self.foo
puts 'Welcome to ruby'
end
def self.bar
foo
end
end
Run Code Online (Sandbox Code Playgroud)
Test.bar #欢迎来到红宝石
spi*_*ann 12
是,有一点不同.但不是在你的例子中.但是如果foo是一个private类方法,那么你的第一个版本会引发一个异常,因为你foo用一个明确的接收者调用:
class Test
def self.foo
puts 'Welcome to ruby'
end
private_class_method :foo
def self.bar
self.foo
end
end
Test.bar
#=> NoMethodError: private method `foo' called for Test:Class
Run Code Online (Sandbox Code Playgroud)
但第二个版本仍然有效:
class Test
def self.foo
puts 'Welcome to ruby'
end
private_class_method :foo
def self.bar
foo
end
end
Test.bar
#=> "Welcome to ruby"
Run Code Online (Sandbox Code Playgroud)