Ruby - 从符号转换为变量

Bud*_*Joe 11 ruby metaprogramming

我如何将:obj转换回def中的一个名为obj的变量?

def foo(bar)
  bar.some_method_call
end

foo :obj
Run Code Online (Sandbox Code Playgroud)

更新:最终的代码比这更精细,但......

我喜欢说

foo :obj  
Run Code Online (Sandbox Code Playgroud)

代替

foo obj  
Run Code Online (Sandbox Code Playgroud)

我正在研究一些类似DSL的语法.而这一改变会让事情看得更清楚一些.

sep*_*p2k 12

obj你的例子中有什么样的变量?如果它是调用foo的作用域的局部变量,则无法从foo内部访问它,除非您将当前绑定作为第二个参数传递.

如果要访问实例变量@obj,则很容易:

def foo(bar)
  instance_variable_get("@#{bar}").length
end

@obj = "lala"
foo("obj") #=> 4
Run Code Online (Sandbox Code Playgroud)


mad*_*lep 5

你可以使用eval

def foo(bar)
  eval(bar.to_s).some_method_call
end
Run Code Online (Sandbox Code Playgroud)


Chu*_*uck 0

你几乎肯定不能。该定义将无权访问调用范围的局部变量。如果您想更全面地解释您想要做什么,我们也许可以提供一个有用的替代方案。