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

Project1

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

[已经解决] 最近在学习脚本,被卡住了.........

[复制链接]

Lv1.梦旅人

梦石
0
星屑
85
在线时间
250 小时
注册时间
2011-12-18
帖子
59
跳转到指定楼层
1
发表于 2015-2-4 23:11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
求教super initialize attr_accessor :XXX 这三条到底是用来做什么的.....看了许多教程感觉太抽象了,还是看不明白......麻烦哪位能详细的说一下,比如它们的用法还有使用后显示出来的效果等等,谢谢  

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
9966
在线时间
5019 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

2
发表于 2015-2-4 23:53:28 | 只看该作者
本帖最后由 VIPArcher 于 2015-2-4 23:56 编辑

super是调用父类的同名方法
  1. #例子:
  2. class A
  3.   def a
  4.     '喵呜='
  5.   end
  6. end
  7. class B < A
  8.   def initialize
  9.     @miao = 0
  10.   end
  11.   def a
  12.     p super + @miao.to_s
  13.   end
  14. end
  15. B.new.a  #=> "喵呜=0"
复制代码
initialize 是调用new方法生成实例时会自动调用的方法。
attr_accessor :xxx #在RGSS里被称为设置可读写的属性的解释
实际上它等价于

  1. #===================
  2.   attr_accessor :miao
  3.   #等价于
  4.   def miao
  5.     @miao
  6.   end
  7.   def miao=(x)
  8.     @miao = x
  9.   end
  10. #===================
复制代码

点评

坏喵呜,坏喵呜,窝还不想怀孕呢。  发表于 2015-2-5 09:12
不黑窝会怀孕吗  发表于 2015-2-5 00:57
以上纯手机瞎打的。有错误请无视•﹏•  发表于 2015-2-4 23:54

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
85
在线时间
250 小时
注册时间
2011-12-18
帖子
59
3
 楼主| 发表于 2015-2-5 09:41:09 | 只看该作者
本帖最后由 鱼剑浆糊 于 2015-2-5 09:42 编辑
VIPArcher 发表于 2015-2-4 23:53
super是调用父类的同名方法initialize 是调用new方法生成实例时会自动调用的方法。
attr_accessor :xxx #在 ...


谢谢,super还是不太明白,可否详细的解释一下???

initialize的意思是不是假如我定义了一个 initialize('hahaha')那么后面调用的时候直接调用hahaha?

attr_accessor  比如我定义了一个 attr_accessor :hahaha   当我后面给hahaha赋值的时候自动就算给@hahaha赋值了???
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2015-2-5 09:53:32 | 只看该作者
鱼剑浆糊 发表于 2015-2-5 09:41
谢谢,super还是不太明白,可否详细的解释一下???

initialize的意思是不是假如我定义了一个 initiali ...


super: 调用超级父类方法。initialize 方法会在生成实例(new)的时候自动调用。

关于 attr_accessor ,暂时就这么理解吧。

RUBY 代码复制
  1. class C
  2.   def initialize(argument)
  3.     puts "生成了一个#{self.class}的实例,参数为#{argument}"
  4.   end
  5. end
  6.  
  7. C.new(233) # 输出:生成了一个C的实例,参数为233
  8.  
  9. class CC < C
  10.   def initialize
  11.     super(233) # 调用类 C 的同名实例方法 initialize。
  12.   end
  13. end
  14.  
  15. CC.new # 输出:生成了一个CC的实例,参数为233

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
85
在线时间
250 小时
注册时间
2011-12-18
帖子
59
5
 楼主| 发表于 2015-2-5 10:36:19 | 只看该作者
taroxd 发表于 2015-2-5 09:53
super: 调用超级父类方法。initialize 方法会在生成实例(new)的时候自动调用。

关于 attr_acce ...

{:2_276:}更看不懂了.....

点评

puts、p、print,你在事件脚本里用p 1然后再执行一下好了  发表于 2015-2-5 14:03
就是输出的意思,没啥特别的用处  发表于 2015-2-5 10:59
puts是啥...和initializ放一起有什么用.....  发表于 2015-2-5 10:55
...我想不出更简单的例子了 = = 是不知道字符串嵌入的语法么?  发表于 2015-2-5 10:39
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32025
在线时间
5081 小时
注册时间
2012-11-19
帖子
4877

开拓者

6
发表于 2015-2-5 11:20:51 | 只看该作者
本帖最后由 芯☆淡茹水 于 2015-2-5 11:29 编辑

super 你就当它是一个简写好了,简写的是该类的上一级(父类)的同名方法内容。(首先确定该类
有没有上一级父类,以及父类里有没有同名的方法)
比如说中央法规和地方法规。先规定了中央法规,在写地方法规时,要沿用全部中央法规的内容,
就 super ,然后后面再写地方法规的内容。

initialize 就当做是一个默认方法吧,可有可无的一个方法。在生成类的实例时,有这个 initialize 方法
就自动执行它,没有当然就不执行。一些类在生成实例的时候就需要赋值啊,计算啊,,,什么的,
就可以把这些赋值,计算,,,的过程,定义一个 initialize ,再写在 initialize 方法里。有些类不需要
一些初期的处理,就可以不定义这个 initialize 方法的。

attr_accessor  定义读取和写入的方法,后面跟 : 加变量名。
比如@hahaha, 如果没定义这个 attr_accessor ,这个变量@hahaha 只能在该类的内部使用,在该
类的外部,不能读取或者改变它。定义了 attr_accessor :hahaha   ,就可以在外部读取它的值,或者
改变它的值。

点评

如果还不能理解。建议LZ先学习ruby的控制结构。  发表于 2015-2-5 11:29
复制LS的,没复制完。-_-!  发表于 2015-2-5 11:28
initialize 别拼错啊= =  发表于 2015-2-5 11:26

评分

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

查看全部评分

xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
85
在线时间
250 小时
注册时间
2011-12-18
帖子
59
7
 楼主| 发表于 2015-2-5 11:31:29 | 只看该作者
芯☆淡茹水 发表于 2015-2-5 11:20
super 你就当它是一个简写好了,简写的是该类的上一级(父类)的同名方法内容。(首先确定该类
有没有上一 ...

哦哦 谢谢 那super super()和某个变量后面+super有什么区别???
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
32025
在线时间
5081 小时
注册时间
2012-11-19
帖子
4877

开拓者

8
发表于 2015-2-5 11:48:30 | 只看该作者
super   执行父类同名方法。
super() 如果父类同名方法需要参数,在括号里对应的写入参数,传递给父类的同名方法,并执行。
如果括号为空,意思为 子类的方法需要参数,而父类不需要参数,那么子类就不传递参数给父类。貌似是这样。
+super 把 super 用于计算,要先确定父类的同名方法运行结果能不能用于计算,比如 nil 就会报错。
这个 +super 大概意思为:加上父类的同名方法的运算返回的值。
xp vx va mv  va mz 各类型脚本/插件定制
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
85
在线时间
250 小时
注册时间
2011-12-18
帖子
59
9
 楼主| 发表于 2015-2-5 12:11:11 | 只看该作者
芯☆淡茹水 发表于 2015-2-5 11:48
super   执行父类同名方法。
super() 如果父类同名方法需要参数,在括号里对应的写入参数,传递给父类的同 ...

谢谢 明白了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-7 20:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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