Project1

标题: 方法参数的问题 [打印本页]

作者: 赤点    时间: 2009-7-24 21:58
标题: 方法参数的问题
如何当传一个参数给方法时,在方法中创建该变量名。
def a(b)
   参数的变量名 = 1
  p 参数变量名
end
self.a(away)
等同于
   away = 1
  p away
作者: 后知后觉    时间: 2009-7-24 22:23
有点深奥……

有点弯……

这样执行有必要吗- -
作者: ONEWateR    时间: 2009-7-24 22:29
有点深奥……

有点弯……

这样执行有必要吗- -
后知后觉 发表于 2009-7-24 22:23


说不定在某些场合还会用的上~
其实类似这样的情况也可以用 array 来完成 - -~

这个问题以前也想过,等待紫苏大的降临吧~
作者: 后知后觉    时间: 2009-7-24 22:47
LZ要的效果在我能力之外

很难想象。。。
作者: dbshy    时间: 2009-7-24 22:50
没听明白LZ的意思,哪位能解释一下
作者: 后知后觉    时间: 2009-7-24 22:58
本帖最后由 后知后觉 于 2009-7-24 23:02 编辑

我是这样理解的
一个变量又或者是对象- - 比如叫
away
然后把这个变量传递给方法 a(away)
然后在方法a的内部创建一个变量叫 away
然后给这个新建的away = 1 再 p away

一句话就是传递给方法a的是一个要新建的变量的变量名- -
作者: TERENCE    时间: 2009-7-24 23:49
用Hash(哈希表) 制作 不知道可不可行?
作者: TERENCE    时间: 2009-7-25 00:52
本帖最后由 TERENCE 于 2009-7-25 00:56 编辑

利用Hash(哈希表) 达成效果
  1. class Create_Variable_Name
  2.   attr_accessor :variable_name
  3.   def initialize
  4.     @variable_name = Hash.new
  5.   end
  6.   def name(variable_name)
  7.     @variable_name[variable_name] = nil
  8.   end
  9. end
复制代码
h = Create_Variable_Name.new
h.name("KA")
h.name("KB")
h.name("KC")
p t = h.variable_name # {"KA"=>nil, "KB"=>nil, "KC"=>nil}
p t["KA"] = 10 # 10
p t # {"KA"=>10, "KB"=>nil, "KC"=>nil}
p h.variable_name # {"KA"=>10, "KB"=>nil, "KC"=>nil}
# 運算
p t["KA"] += 10 # 20
p t # {"KA"=>20, "KB"=>nil, "KC"=>nil}
p h.variable_name # {"KA"=>20, "KB"=>nil, "KC"=>nil}

感觉好像没什么意义 = =
# 创建该变量名
h = Create_Variable_Name.new
h.name("创建变量名")

# 变量運算
t = h.variable_name
t["创建的变量名"] = 10 # 10
作者: 紫苏    时间: 2009-7-25 09:05
  1. eval("
  2. def a(var)
  3.   var = 1
  4.   p var
  5. end
  6. ")

  7. a("my_var")
复制代码
或者:

  1. def a(var)
  2.   eval("#{var} = 1")
  3.   p eval("#{var}")
  4. end

  5. a("my_var")
复制代码
局部变量比较特殊——非局部变量在 eval 之后就可以在外部直接调用了,但局部变量不行,因为 Ruby 解释器在判断一个不带符号的英文单词是方法还是局部变量时会判断之前是否有对这个单词赋值的语句出现,但如果赋值是在字符串中通过 eval 执行的,Ruby 解释器就不会认为它是一个局部变量,而是一个方法了~而如果这个方法没定义,自然就会报错……实际上内存中这个局部变量已经产生了,所以上面的第二种方法是再次调用 eval 去访问这个局部变量
作者: 赤点    时间: 2009-7-25 12:02
明白了,去试试,多谢指教




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