lululau 发表于 2010-12-11 17:04

请教关于类方法的定义和调用

请问下面这两段代码中定义和调用类方法的方式在ruby语法中时等价的吗?
class Hello
    def Hello.say
      puts "hello"
    end
end

Hello.say

class Hello
    def Hello::say
      puts "hello"
    end
end

Hello::say

2gua 发表于 2010-12-11 21:47

irb(main):001:0> class Hello
irb(main):002:1>   def Hello.say
irb(main):003:2>         puts "hello"
irb(main):004:2>   end
irb(main):005:1> end
=> nil
irb(main):006:0> class Hello1
irb(main):007:1>   def Hello1::say
irb(main):008:2>         puts "hello1"
irb(main):009:2>   end
irb(main):010:1> end
=> nil

irb(main):011:0> Hello.say
hello
=> nil
irb(main):013:0> Hello::say
hello
=> nil
irb(main):014:0> Hello1.say
hello1
=> nil
irb(main):015:0> Hello1::say
hello1
=> nil

由此见,是等价的。

zuerrong 发表于 2010-12-12 09:16

请问下面这两段代码中定义和调用类方法的方式在ruby语法中时等价的吗?
lululau 发表于 2010-12-11 17:04 http://bbs.chinaunix.net/images/common/back.gif


    ::更多的用于标明名字空间。在实际中,该操作符用于访问模块方法、常量和类常量,如Math::PI、FileTest::exists? "a.txt".
虽然LZ的例子::和.差不多,但ruby实际里很少使用::定义类方法。module Foo

class Bar
end

end

x = Foo::Bar.new #=> a new instance of Foo::Bar
x = Foo.Bar.new #=> error两者也并不完全一致。

2gua 发表于 2010-12-12 13:24

就楼主的场景,是一致的。而就祖儿的场景,是不一致的。
祖儿解释很不错哦。:em27:

lululau 发表于 2010-12-13 10:03

谢谢zuerrong和2gua两位高手的指教

2gua 发表于 2010-12-13 16:25

不客气,常来:)
页: [1]
查看完整版本: 请教关于类方法的定义和调用