【发布时间】:2012-06-10 18:14:04
【问题描述】:
我有一个变量,我们称之为@foo。我希望它是一个字符串,所以我打电话给@foo.downcase。有时它为零,我会得到这个错误:
NoMethodError: undefined method `downcase' for nil:NilClass
from (irb):4
from /Users/schneems/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>
我想做的是写一些代码告诉我nil实际上是@foo
NoMethodError: undefined method `downcase' on variable @foo, variable is a nil:NilClass
from (irb):4
from /Users/schneems/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>
要做这样的事情,我需要以编程方式获取变量的名称。
问题:是否可以通过 ruby 编程方式获取变量的名称?
我正在寻找能产生如下输出的东西:
@foo.magical_variable_method #=> '@foo'
bar.magical_variable_method #=> 'bar'
AweSome.magical_variable_method #=> 'AweSome'
$wat.magical_variable_method #=> '$wat'
我不想要变量的值,也不关心它是否是nil。我想要变量的人类可读名称。是否有可能以编程方式获取变量的名称?
【问题讨论】:
-
你能再澄清一下你想要什么吗?您是否正在寻找一种方法来查看
@foo是否为nil,或者寻找一种能够返回所有当前为nil的变量的方法?或者完全是别的什么? -
我更新了这个问题,希望能更清楚一点,谢谢你的提问。
-
在没有宏的语言中可能会非常困难。换成 Lisp 怎么样?
-
确实有可能我拼凑了一个潜在的解决方案gist.github.com/2907252,尽管如果您尝试使该代码可重用,事情会变得很棘手,因为这样做需要在方法中使用变量。也许有一些 ruby bindingfu 的人可以解决这个问题。
标签: ruby