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

Project1

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

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3298
在线时间
1120 小时
注册时间
2009-4-15
帖子
815
跳转到指定楼层
1
发表于 2013-12-17 15:44:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
最近无聊看代码,看到Game_Actors这个类,疑问来了:
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 获取角色
  3.   #--------------------------------------------------------------------------
  4.   def [](actor_id)
  5.     return nil unless $data_actors[actor_id]
  6.     @data[actor_id] ||= Game_Actor.new(actor_id)
  7.   end

这段代码是什么意思?定义[]?定义[]了还传参?将actor_id传给这个方法?
里面的内容第二行@data[actor_id] ||= Game_Actor.new(actor_id)是什么意思?尤其是||=这个运算符……我只知道+=、-=之类的,整个表达式的意思是?
抱歉,我是java程序员,所以对ruby不是很熟,望各位大大包含。

Lv3.寻梦者

梦石
0
星屑
2749
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

2
发表于 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
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

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

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

点评

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

评分

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

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
21631
在线时间
9415 小时
注册时间
2012-6-19
帖子
7118

开拓者短篇九导演组冠军

4
发表于 2013-12-17 16:29:58 | 只看该作者
后面那个||=是个缩写形式的赋值操作符,具体的……同样还是出自上面那本书,自己看吧:



回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

非常感谢指导,谢谢!
回复 支持 反对

使用道具 举报

Lv3.寻梦者

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

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 04:58

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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