Project1

标题: 如何遍历一个class中的所有属性? [打印本页]

作者: galaxys    时间: 2012-4-22 10:11
标题: 如何遍历一个class中的所有属性?
如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的每个属性呢?dsu_plus_rewardpost_czw
作者: nokaiwai    时间: 2012-4-22 10:46
本帖最后由 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
复制代码
希望沒猜錯你的意思
作者: galaxys    时间: 2012-4-22 10:55
是讀取一个角色的全部屬性,并且想知道这个简单的 p 中间有什么故事……
或者这样说,p $data_actors[1]会显示1号角色的所有属性,但如果我想要不显示属性名,只显示所有属性的值呢?或者相反,只显示属性名,不显示属性值?

谢谢你
作者: 吉井明久    时间: 2012-4-22 11:05
本帖最后由 吉井明久 于 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
复制代码

作者: galaxys    时间: 2012-4-22 11:28
本帖最后由 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号角色的所有属性名。




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