设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1579|回复: 9
打印 上一主题 下一主题

[已经解决] 谁能帮忙详细的解释下self用法?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2013-7-4
帖子
17
跳转到指定楼层
1
发表于 2013-7-23 20:56:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 liu3124493 于 2013-7-23 21:52 编辑

self 是表示自身对象的伪变量??看了帮助里面 对这些个理解不是很透,能帮忙举例或解释下吗?十分感谢,还有,是不是遇到语法上的障碍都得发一次贴啊???没一个更方便的地方问了吗?

Lv1.梦旅人

梦石
0
星屑
55
在线时间
869 小时
注册时间
2009-3-13
帖子
782
2
发表于 2013-7-23 21:07:26 | 只看该作者
self是对自身的引用,把它理解成【自己】就好了= =
我的寒假活动作品:http://rpg.blue/forum.php?mod=viewthread&tid=281065
咱的龙蛋,求点击:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2013-7-4
帖子
17
3
 楼主| 发表于 2013-7-23 21:11:01 | 只看该作者
认真的学 发表于 2013-7-23 21:07
self是对自身的引用,把它理解成【自己】就好了= =

嗯 我知道是自己的意思,但是具体的作用我不太明白。有个例子就好多了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
869 小时
注册时间
2009-3-13
帖子
782
4
发表于 2013-7-23 21:17:34 | 只看该作者
liu3124493 发表于 2013-7-23 21:11
嗯 我知道是自己的意思,但是具体的作用我不太明白。有个例子就好多了

比如RM里面的窗口,有self.contents,意思就是该窗口自己的contents属性。
另外,如果方法名的前面带self,那么这个方法就是类方法。
我的寒假活动作品:http://rpg.blue/forum.php?mod=viewthread&tid=281065
咱的龙蛋,求点击:
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
20 小时
注册时间
2013-7-4
帖子
17
5
 楼主| 发表于 2013-7-23 21:30:47 | 只看该作者
认真的学 发表于 2013-7-23 21:17
比如RM里面的窗口,有self.contents,意思就是该窗口自己的contents属性。
另外,如果方法名的前面带self ...

content前面不加self会怎么样?如果content就是在这窗口下使用的。没了self难道就不是该窗口的属性了吗?

点评

其实很多情况下可以省略self的。  发表于 2013-7-23 21:33
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1409
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

6
发表于 2013-7-23 21:57:44 手机端发表。 | 只看该作者

潜水党怒刷存在感

本帖最后由 铅笔描绘的思念 于 2013-7-23 22:01 编辑

在看爪哇this的时候随顺便看了下ruby self
。。self可以是全局变量 存在于object中
p self #main
p self.class# Object
代表Object的默认对象main。。
self也可以是一种全局方法(?)
在class和module的定义中,self代表这个class或这module对象。。
如果在一个类中某个方法中调用了self。。。那么就是代表这个类的这个方法。。

如果在某个单例对象中就代表这个单例对象
(ps:单例方法是针对某个对象添加的方法)

window = Window_Base.new
def window.dispose
  p self # => 代表window这个单例对象
end
self存在于单例变量中明显和存在于实例方法中不同。。
好了大概就这样

评分

参与人数 1星屑 +120 收起 理由
怪蜀黍 + 120 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2013-2-8
帖子
424
7
发表于 2013-7-24 01:25:33 手机端发表。 | 只看该作者
首先你调用一个方法,肯定是对某个实例进行调用(模块也视为特殊的实例),self就是代表被调用方法的实例本身了。
另外,method= 这种方法在类内部调用需要加self,否则会被解释成赋值语句(对局部变量method赋值)。
回复 支持 反对

使用道具 举报

Lv2.观梦者 (暗夜天使)

梦石
0
星屑
266
在线时间
2355 小时
注册时间
2009-3-13
帖子
2309

贵宾

8
发表于 2013-7-24 10:17:05 | 只看该作者
本帖最后由 Sion 于 2013-7-24 10:18 编辑

补充楼上,还有方法名前加self
在类中称为类方法
  1. class A
  2.   def self.test_a
  3.     p 1
  4.   end
  5. end
复制代码
可以在任何位置调用:
  1. A::test_a
复制代码
模块里这样定义的叫公共方法 public method
  1. module B
  2.   def self.test_b
  3.     p 2
  4.   end
  5. end
复制代码
它等价于
  1. module B
  2.   module_function
  3.   def test_b
  4.     p 2
  5.   end
  6. end
复制代码
或者
  1. module B end
  2. class << B
  3.   def test_b
  4.     p 2
  5.   end
  6. end
复制代码
也可以在模块外随意调用:
  1. B.test_b
复制代码

评分

参与人数 1梦石 +1 收起 理由
怪蜀黍 + 1 精品文章

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33608
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

9
发表于 2013-7-24 10:51:37 | 只看该作者
其实还不如说点实际的用法,
比如,制作某些单键开关
switch = true
然后下面开闭开关时
switch != self
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv2.观梦者

会吐槽的画师

梦石
0
星屑
782
在线时间
3431 小时
注册时间
2011-6-10
帖子
6535
10
发表于 2013-7-24 11:27:44 | 只看该作者
self变量是一个系统定义的变量,用来在某些表达式里指代做出动作的一方,self.可以跟很多属性,在脚本batter里用于计算战斗的时候可以用self做很多修改,另外也可以跟上武器等属性来做类似于装备的镶嵌,升级,打孔等脚本%
长名公主玩家群:372588926 攻略娱乐应有尽有
了解更多新RM游戏,游戏制作请加入RPGmaker支援群:113622890
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-23 03:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表