Project1

标题: 关于变量的问题 [打印本页]

作者: clap_pl    时间: 2011-1-9 20:14
标题: 关于变量的问题
这个问题在帖子名字上不太好表达
比如说 我有一系列变量分别叫 a1 , a2, a3, a4
还有一个变量 i
当i 为1时 return a1
为2时 return a2
为3时return a3
为4时return a4
(注:不用数组,不用
case i
when 1
return a1
when 2
return a2
when 3
return a3
end
这样的语句)
也就是说 能不能在变量名里 嵌套一个变量来控制
类似字符串里嵌套一个变量一样 如 #{XXX}

作者: fux2    时间: 2011-1-9 20:22
回复 clap_pl 的帖子

a = []
def get_num(i)
   return a
end
作者: enghao_lim    时间: 2011-1-9 21:47
return eval("a#{i}")
作者: clap_pl    时间: 2011-1-10 11:03
本帖最后由 clap_pl 于 2011-1-10 12:05 编辑

用了楼上的方法 结果出错了
a0=0
a1=1
a2=2
a3=3
def pip(i=0)
  return eval("a#{i}")
end
p pip(1)
我是这么写了一个 在RUBY IDE下试了一下
结果报错
报错信息如下
test.rb:7:in `pip': undefined local variable or method `a1' for main:Object (NameError)

#对不起,搞错了
我定义的变量a0到a1是局部变量 作用域不对
试着改成

def pip(i=0)
a0=0
a1=1
a2=2
a3=3
return eval("a#{i}")
end
就对了 谢谢楼上两位

顺便查了下 eval的用法,这是个很有用的东西啊!
#======================
有时候要一组字符串能能够动态地执行,ruby中的eval方法就提供了这样的功能

语法:
--------------------------------------------------------------------------------
eval( 可执行字符串)

使用举例:
--------------------------------------------------------------------------------
Code
a = 1
b="true"
c="false"
str ="
if a==1 then
     puts '输出:#{b}'
else
     puts '输出:#{c}'
end
"
eval(str)
输出结果为:"true"
#=========================================




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