查看: 1986|回复: 5

[已经解决] 关于Game_Actors类的疑问

[复制链接]
梦石
0
星屑
3348
在线时间
1120 小时
注册时间
2009-4-15
回帖
761
发表于 2013-12-17 15:44:36 | 显示全部楼层 |阅读模式

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

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

×
最近无聊看代码,看到Game_Actors这个类,疑问来了:
[pre lang="ruby" line="1"]#--------------------------------------------------------------------------
  # ● 获取角色
  #--------------------------------------------------------------------------
  def [](actor_id)
    return nil unless $data_actors[actor_id]
    @data[actor_id] ||= Game_Actor.new(actor_id)
  end[/pre]
这段代码是什么意思?定义[]?定义[]了还传参?将actor_id传给这个方法?
里面的内容第二行@data[actor_id] ||= Game_Actor.new(actor_id)是什么意思?尤其是||=这个运算符……我只知道+=、-=之类的,整个表达式的意思是?
抱歉,我是java程序员,所以对ruby不是很熟,望各位大大包含。
梦石
0
星屑
2826
在线时间
2634 小时
注册时间
2013-1-16
回帖
5453

贵宾

发表于 2013-12-17 16:04:51 | 显示全部楼层
本帖最后由 myownroc 于 2013-12-17 16:12 编辑

定义[]可以理解为实例数组化(只读)
例如
  1. a=Game_Actors.new
  2. x=a[0]
复制代码
如果没有定义[],后面x=a[0]就不能实现,并且报错。
这个在Game_Variables类和Game_Switches类也是一样。
||=可以百度找到。
例如:
  1. a||=0
复制代码
当a存在但还没赋值时,a赋值0;若已赋值,则不做操作。
整个代码意思是:
如果数据库中第id个角色不存在,实例就返回空;存在时,若还没赋值,就将数据库的相应内容赋值给实例。

评分

参与人数 1星屑 +150 收起 理由
Sion + 150 感谢帮忙

查看全部评分

(Created by @喵kano)


施工现场:hotege.github.io
回复

使用道具 举报

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

开拓者短篇九导演组冠军

发表于 2013-12-17 16:26:04 | 显示全部楼层
个人理解:
def []算是Ruby语言的一个特性,除了部分关键字,其他东西在Ruby中都是方法,包括在数组和哈希中使用的这个方括号,只要需要,我可以在每个类中为这个方括号获得的内容设置一个特殊的规则
例如
我想定义一个直角坐标系Point,这个直角坐标系有X坐标和Y坐标,这时候重定义[]就可以实现用
@x = Point.new
@x[x],@x[y]
这样类似的形式方便的获取我这个直角坐标系中某一点X的横坐标和纵坐标

具体可以参考《Ruby编程语言(作者:(美)弗拉纳根,松本行弘)》这本书中下面这个例子

TM截图20131217163010.png

点评

[]不能算Ruby的特性,至少C++是可以重载[]操作符的,不过将[]=独立重载的可能算是特性吧  发表于 2013-12-18 12:15

评分

参与人数 1星屑 +150 收起 理由
Sion + 150 感谢帮忙

查看全部评分

回复

使用道具 举报

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

开拓者短篇九导演组冠军

发表于 2013-12-17 16:29:58 | 显示全部楼层
后面那个||=是个缩写形式的赋值操作符,具体的……同样还是出自上面那本书,自己看吧:
TM截图20131217163010.png
TM截图20131217163340.png
TM截图20131217163352.png
回复

使用道具 举报

梦石
0
星屑
3348
在线时间
1120 小时
注册时间
2009-4-15
回帖
761
 楼主| 发表于 2013-12-17 16:32:57 | 显示全部楼层
myownroc 发表于 2013-12-17 16:04
定义[]可以理解为实例数组化(只读)
例如如果没有定义[],后面x=a[0]就不能实现,并且报错。
这个在Game_Var ...

非常感谢指导,谢谢!
回复

使用道具 举报

梦石
0
星屑
3348
在线时间
1120 小时
注册时间
2009-4-15
回帖
761
 楼主| 发表于 2013-12-17 16:35:58 | 显示全部楼层
喵呜喵5 发表于 2013-12-17 16:26
个人理解:
def []算是Ruby语言的一个特性,除了部分关键字,其他东西在Ruby中都是方法,包括在数组和哈希 ...

感谢喵呜喵5大大,果然想更深的写RM必须从基础抓起啊……
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部