0

我知道红宝石允许静态函数在同一个类中相互调用的两种方式......

class MyClass

  def self.foo
    self.say "self"
  end

  def self.bar
    MyClass.say "class name"
  end

  def self.say(text)
    puts "Using #{text}"
  end

end

两种语法之间有什么细微差别吗?也许是性能?

4

2 回答 2

4

不,那些是完全一样的。性能方面也是如此。唯一的区别是代码的可维护性。如果您决定将具有显式类引用的方法移动到另一个类,那么您需要做的工作更多(或更少,具体取决于具体情况)

def self.bar
  MyClass.say "class name"
end

哦,ruby 中没有静态方法。

此外,您不需要显式地使用self来调用那里的方法。self可以是隐式的。

class MyClass

  def self.foo
    say "self"
  end

  def self.say(text)
    puts "Using #{text}"
  end

end

MyClass.foo
# >> Using self
于 2013-02-01T18:58:43.140 回答
1

不,没有区别。Ruby 慷慨地提供了多种方法来做同样的事情。

于 2013-02-01T19:00:01.990 回答