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

Project1

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

[已经解决] 如何遍历一个class中的所有属性?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
119 小时
注册时间
2008-3-10
帖子
42
跳转到指定楼层
1
发表于 2012-4-22 10:11:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如actor class有如下属性:
id
name
class_id
initial_level
exp_basis
exp_inflation
character_name
character_index
face_name
face_index
parameters
weapon_id
armor1_id
armor2_id
armor3_id
armor4_id
two_swords_style
fix_equipment
auto_battle
super_guard
pharmacology
critical_bonus

我用    $data_actors        = load_data("Data/Actors.rvdata")拿到所有actor的数据,如何遍历每个actor的每个属性呢?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
62 小时
注册时间
2011-1-28
帖子
35
2
发表于 2012-4-22 10:46:23 | 只看该作者
本帖最后由 nokaiwai 于 2012-4-22 10:47 编辑

遍历是什麼意思呢- -?
我理解能力不好嗎.....
只想到四個可能情況
要讀取一個角色的一項屬性的話可以是
  1. num = 1 #人物編號
  2. p $data_actors[num].name
复制代码
要讀取一個角色的全部屬性的話可以是
  1. num = 1 #人物編號
  2. p $data_actors[num]
复制代码
要讀取全部角色的一項屬性的話可以是
  1. all_name = []
  2. $data_actors[1..-1].each{|data| all_name += [data.name]}
  3. p all_name
复制代码
要讀取全部角色的全部屬性的話(可能會因為資料太多而失去部分資訊)可以是
  1. p $data_actors
复制代码
希望沒猜錯你的意思

评分

参与人数 1星屑 +10 收起 理由
iisnow + 10 感谢帮助

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
119 小时
注册时间
2008-3-10
帖子
42
3
 楼主| 发表于 2012-4-22 10:55:27 | 只看该作者
是讀取一个角色的全部屬性,并且想知道这个简单的 p 中间有什么故事……
或者这样说,p $data_actors[1]会显示1号角色的所有属性,但如果我想要不显示属性名,只显示所有属性的值呢?或者相反,只显示属性名,不显示属性值?

谢谢你
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
112 小时
注册时间
2011-10-6
帖子
182
4
发表于 2012-4-22 11:05:06 | 只看该作者
本帖最后由 吉井明久 于 2012-4-22 12:12 编辑
  1. defs = (a.methods - Object.methods)
复制代码
defs 里面就有 a 的所有方法名符号。
而根据符号来调用方法,
  1. sym = defs[0]
  2. a.send sym, .....
复制代码
省略号为给那个符号对应的方法所需的参数,可以没有。

其实只要得到
  1. a.instance_variables
复制代码
不就可以了么?

p x 实际上是调用 print x.inspect,
而 x.inspect 就用了 instance_variables

instance_variables 可以得到所有变量的符号。对于其中的每个符号 s,可以用 x.instance_variavble_get s 来得到值。

  1. def insp(x)
  2.   x.instance_variables.each {|sym|
  3.     p sym, x.instance_variable_get sym
  4.   }
  5. end
复制代码
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
119 小时
注册时间
2008-3-10
帖子
42
5
 楼主| 发表于 2012-4-22 11:28:58 | 只看该作者
本帖最后由 galaxys 于 2012-4-22 11:30 编辑
吉井明久 发表于 2012-4-22 11:05
defs 里面就有 a 的所有方法名符号。
而根据符号来调用方法,省略号为给那个符号对应的方法所需的参数,可 ...


谢谢!
下面这段代码可以显示1号角色的所有属性值 :
PHP 代码复制
  1. x = ""
  2.   for i in 1 .. $data_actors[1].instance_variables.size
  3.     sym = $data_actors[1].instance_variables[i]
  4.     if sym != nil then
  5.       sValue = $data_actors[1].instance_variable_get(sym)
  6.       x = x + sValue.to_s + " "
  7.     end
  8.   end
  9.   p x


而p $data_actors[1].instance_variables
可以显示1号角色的所有属性名。

评分

参与人数 1星屑 +40 收起 理由
iisnow + 40 我很赞同

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-14 10:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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