查看: 2251|回复: 6

[已经解决] def后面的方法为什么有个self前缀,有什么作用呢?

[复制链接]
梦石
0
星屑
50
在线时间
34 小时
注册时间
2011-3-10
回帖
12
发表于 2014-12-10 09:28:21 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
module Cache
  #--------------------------------------------------------------------------
  # ● 获取动画图像
  #--------------------------------------------------------------------------
  def self.animation(filename, hue)
    load_bitmap("Graphics/Animations/", filename, hue)
  end

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

好迷茫啊

梦石
1
星屑
23246
在线时间
9564 小时
注册时间
2012-6-19
回帖
7018

开拓者短篇九导演组冠军

发表于 2014-12-10 10:15:29 | 显示全部楼层
本帖最后由 喵呜喵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
复制代码

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
62
在线时间
839 小时
注册时间
2010-6-26
回帖
652
发表于 2014-12-10 11:16:19 | 显示全部楼层
以前有人跟我说,module里面的要加self,class不用加。虽然不是很懂不过好像有道理?

点评

很没道理,嗯。我经常在module里面不加self,在class里面加的  发表于 2014-12-10 12:33
新手们!不要被看扁了!我们也会用论坛搜索,我们也会自己找脚本,我们也会自己点击关闭按钮旁边的小问号!
回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2014-12-10 12:40:36 | 显示全部楼层
self 指的是模块本身,在这里可以替换成 Cache

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

使用道具 举报

梦石
0
星屑
50
在线时间
34 小时
注册时间
2011-3-10
回帖
12
 楼主| 发表于 2014-12-10 12:50:08 | 显示全部楼层
喵呜喵5 发表于 2014-12-10 10:15
class A
  def r
    p "a"

| ω・´)有点像静态方法。。。

点评

就这么理解吧。  发表于 2014-12-10 12:51
回复

使用道具 举报

梦石
0
星屑
50
在线时间
34 小时
注册时间
2011-3-10
回帖
12
 楼主| 发表于 2014-12-10 12:51:12 | 显示全部楼层
企鹅达达 发表于 2014-12-10 11:16
以前有人跟我说,module里面的要加self,class不用加。虽然不是很懂不过好像有道理? ...

应该都可以加的感觉~
回复

使用道具 举报

梦石
0
星屑
50
在线时间
34 小时
注册时间
2011-3-10
回帖
12
 楼主| 发表于 2014-12-10 12:53:32 | 显示全部楼层
taroxd 发表于 2014-12-10 12:40
self 指的是模块本身,在这里可以替换成 Cache

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部