关于常量名
比如说现有以下100个常量(只是举个例子),A1 = 1A2 = 2
A3 = 3
………………
A100 = 100现在要依据这100个常量的名字执行互不相同的操作,比如A1就乘以1,A2就乘以2,如果一个一个写太麻烦了。不知能不能像用for循环那样,常量名里那个数字依次迭代为1..n,再执行操作?
【其实我是来试试看这里有没有人来回答问题】 爱eval(好吧我承认我没效率)100.times do |i|
eval("A#{i} *= A#{i}")
end satgo1546 发表于 2012-9-17 19:24 static/image/common/back.gif
爱eval(好吧我承认我没效率)
以eval的效率这样会卡死的 记得Ruby有些地方和C一样 const_get试试?A1 = 1
A2 = 2
A3 = 3
for i in 1..3
p Object.const_get("A#{i}")
end效率什么的不懂_(:3ゝ∠)_ 本帖最后由 Ruby200 于 2013-3-11 07:45 编辑
symbol也可以用字符串内插:
class A
(1..100).each {|x|
const_set :"A#{x}", x
}
p A43
end
p A::A42
另外下面的eval也未必很慢:
class A
#↓在这个具体语境可以用eval和instance_eval替换
class_eval ["def self.work",
*(1..100).map{|x| "const_set :A#{x}, #{x}"},
"end"].join("\n")
end
A.work
A.work
A.work
p A::A42
好了,思考了N个月,我只知道把这100个常量扔数组之后遍历一次就完了。话说Ruby有取得常量名的函数?{:nm07:} 研究了一下发现其实主要用instance_variable_set,还有const_set以及class_variable_set就可以的=-=。当然各种class eval啊instance eval啊啥的都可以的说。。。。
其实我要吐槽为毛不用一个数组呢。。那样多简单=-=
页:
[1]