当我跑步时,ruby -version
我得到:
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin11.0]
-e:1: undefined local variable or method `rsion' for main:Object (NameError)
有什么问题?
使用 ruby -v 或 ruby --version。它将 -version 解析为 rsion。
这两个工作中的任何一个。计算破折号的数量:
ruby -v
ruby --version
当您提供带有“版本”的单个破折号时,Ruby 会看到:
ruby -v -e rsion
有-v选项和--version选项,但没有 -version 选项。(计算破折号。)为 main:Object 查找未定义的局部变量或方法 'rsion'。
从这个线程,实际原因很清楚:
如果你运行
ruby -version
,因为你只使用一个破折号,单词 'version' 不会被视为单个标志,而是作为标志列表。在这种情况下,它选择 -v 标志,打印版本信息。然后它尝试处理 e 标志,它基本上表示“这一行的其余部分是要执行的 ruby 脚本”。所以 ruby 忠实地尝试解析“rsion”,这是你得到 NameError 的地方。要获取版本信息,您可以执行
ruby -v
或ruby --version
。
这就是解释器的方式,但你也有在 Ruby 中定义的常量。
尝试
$> ruby -e " p RUBY_VERSION"
然后您可以在 Module.constants 下找到
这里
>> Module.constants.sort.each do |constant|
?> puts constant
>> end