Project1

标题: def后面的方法为什么有个self前缀,有什么作用呢? [打印本页]

作者: t8235184    时间: 2014-12-10 09:28
标题: def后面的方法为什么有个self前缀,有什么作用呢?
module Cache
  #--------------------------------------------------------------------------
  # ● 获取动画图像
  #--------------------------------------------------------------------------
  def self.animation(filename, hue)
    load_bitmap("Graphics/Animations/", filename, hue)
  end

为什么在方法名称之前加上了self,这里的self是指什么呢?调用者还是类本身?
这种方法和普通命名的方法有什么区别呢?

好迷茫啊
作者: 喵呜喵5    时间: 2014-12-10 10:15
本帖最后由 喵呜喵5 于 2014-12-10 13:58 编辑
  1. class A
  2.   def r
  3.     p "a"
  4.   end
  5.   def self.r
  6.     p "b"
  7.   end
  8. end
  9. a=A.new
  10. a.r
  11. A.r
复制代码

作者: 企鹅达达    时间: 2014-12-10 11:16
以前有人跟我说,module里面的要加self,class不用加。虽然不是很懂不过好像有道理?
作者: taroxd    时间: 2014-12-10 12:40
self 指的是模块本身,在这里可以替换成 Cache

用法的话就看沙发的代码吧。不太建议你深究其中的原理。
作者: t8235184    时间: 2014-12-10 12:50
喵呜喵5 发表于 2014-12-10 10:15
class A
  def r
    p "a"

| ω・´)有点像静态方法。。。
作者: t8235184    时间: 2014-12-10 12:51
企鹅达达 发表于 2014-12-10 11:16
以前有人跟我说,module里面的要加self,class不用加。虽然不是很懂不过好像有道理? ...

应该都可以加的感觉~
作者: t8235184    时间: 2014-12-10 12:53
taroxd 发表于 2014-12-10 12:40
self 指的是模块本身,在这里可以替换成 Cache

用法的话就看沙发的代码吧。不太建议你深究其中的原理。 ...

恩恩。大概知道怎么用self,像cache这种只运行一次的类,没有实例化的必要,直接用self调用类本身的方法就可以了。  。。 而像窗口那种需要多次实例化的类,就需要有对象独立的方法才行。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1