Project1

标题: 关于[] [打印本页]

作者: 九靈    时间: 2013-8-25 01:18
标题: 关于[]
本帖最后由 九靈 于 2013-8-25 23:28 编辑

Game_Actors
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Game_Actors
  3. #------------------------------------------------------------------------------
  4. #  处理角色排列的类。本类的实例请参考
  5. #  $game_actors。
  6. #==============================================================================
  7.  
  8. class Game_Actors
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对像
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     @data = []
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 获取角色
  17.   #     actor_id : 角色 ID
  18.   #--------------------------------------------------------------------------
  19.   def [](actor_id)
  20.     if actor_id > 999 or $data_actors[actor_id] == nil
  21.       return nil
  22.     end
  23.     if @data[actor_id] == nil
  24.       @data[actor_id] = Game_Actor.new(actor_id)
  25.     end
  26.     return @data[actor_id]
  27.   end
  28. end

[](actor_id) 方法是怎么用? 是xxx.[](actor_id) 这样吗?

我找了个疑似是调用[](actor_id)的
Game_Party
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 设置初期同伴
  3.   #--------------------------------------------------------------------------
  4.   def setup_starting_members
  5.     @actors = []
  6.     for i in $data_system.party_members
  7.       @actors.push($game_actors[i])
  8.     end
  9.   end

中$game_actors[ i ] (是这个调用的吧...)
呃...[]是方法还是数组?
作者: wbsy8241    时间: 2013-8-25 03:10
以下内容来自F1帮助

# 单项+/-
def +@
def -@

# 给要素赋值
def foo=(value)             # obj.foo = value

# [] と []=
def [](key)                 # obj[key]
def []=(key, value)         # obj[key] = value
def []=(key, key2, value)   # obj[key, key2] = value

作者: kuerlulu    时间: 2013-8-25 14:18
首先回答最后一个问题,[]是一个空数组,@actors.push($game_actors)是指(先将 i 赋值从数据文件(Actors.rxdata)中获取的角色信息,然后)用.push方法向@actors添加角色补满数组,如果初期角色没有的话就会返回一个nil。
至于第一个问题LS回答了。。
作者: 无脑之人    时间: 2013-8-25 15:17
[]方法的定义有三种调用方法
1.self[参数1,参数2......]
2.self.[](参数1,参数2......)
3.用send方法调用【这里不讨论
同理 []=方法也有三种
1.self[参数1,参数2......]=参数n
  我们讨论一下这种情况的其他写法(定义是def []=(*args),可以提供任意的参数)
  ①.self[1,2]=       #刚才在RGE中测试,方法没有调用成功
  ②.self[]=            #刚才在RGE中测试,方法没有调用成功,并不是不带参数的调用
  ③.self[1,2]=3,4   #调用的参数是 1,2,[3,4] 而不是1,2,3,4
  可见,调用[]=必须在等号后面带一个参数,而且只能带一个
2.self.[]=(参数1,参数2......) 这个是标准的调用方式,绝不会出问题
3.使用send方法【不讨论

当然,这是调用方法的时候
如果是 a = []这种形式,编译器不会认为是 a= self.[]()这种形式,而是直接返回空数组

……感觉说的乱糟糟的,LZ尝试着理解吧= =




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1