3

我很好奇调用类方法以及两者之间是否有任何区别:

class Jt
  class << self
    def say_hello
      puts "I want to say hello"
    end
  end
end

class Jt2
  def self.say_hello
    puts "2 want to say hello"
  end
end

Jt.say_hello
Jt2.say_hello

只是风格还是红宝石处理这些有什么不同?我总是将后者用于 Rails 的东西,但倾向于在元编程或 Rails 源代码中看到前者。

4

2 回答 2

1

我认为它们之间的区别只是风格。他们都向类的单例类添加了一个方法。这是我对您的代码所做的调查:

class Jt
  class << self
    def say_hello
      puts "I want to say hello"
    end
  end
end

class Jt2
  def self.say_hello
    puts "2 want to say hello"
  end
end

p Jt.singleton_class.instance_method(:say_hello)   # => #<UnboundMethod: #<Class:Jt>#say_hello>
p Jt2.singleton_class.instance_method(:say_hello)  # => #<UnboundMethod: #<Class:Jt2>#say_hello>

以防万一,我使用了 JRuby。

于 2013-04-24T19:25:33.760 回答
0
class << self
    def say_hello
      puts "I want to say hello"
    end
end
  • 是一个singleton class里面class Jt

这里有更多信息What's the difference between a class and the singleton of that class in Ruby?,看这里 Singleton class in Ruby

于 2013-04-24T19:09:54.520 回答