我已经构建了一个应该在终端中运行的 ruby 脚本。
$ ruby script.rb
我有一些特定于较新版本的 ruby 的代码,因此我在页面顶部添加了 ruby 版本检查:
abort("You're using ruby #{RUBY_VERSION}. Please use version 2.1 or newer") if (RUBY_VERSION.to_f < 2.1)
我仔细检查了 irb 中的代码行,并且在通过 RVM 更改 ruby 版本时似乎可以工作。
但是,当我在 ruby 1.8.7 下运行 ruby 脚本文件时,脚本会崩溃并出现以下错误:
$ ruby script.rb
script.rb:6: odd number list for Hash
option1: 'some options',
^
script.rb:6: syntax error, unexpected ':', expecting '}'
option1: 'some options',
^
script.rb:6: syntax error, unexpected ',', expecting $end
如果我没有在文件顶部进行版本检查,这将是预期的行为。
为什么版本检查不在下一行代码之前执行?有没有办法在继续其余代码之前强制执行 ruby 检查?
我的完整文件是:
#!/usr/bin/env ruby
abort("You're using ruby #{RUBY_VERSION}. Please use version 2.1 or newer") if (RUBY_VERSION.to_f < 2.1)
options = {
option1: 'some options',
option2: 'some more options',
option3: 'other options'
}
最佳答案
该错误出现在 ruby 解析器上。在 ruby 1.8.7 中,带有符号的哈希值必须用 hashrockets { :option => 'some options'}
编写,因为简写 { option: '' }
仅在 ruby 1.9
为了更好地解释它,Ruby 必须在执行任何操作之前解析整个文件。因此,您的版本检查不会被执行,因为您的文件具有无效的 ruby 1.8 语法。
关于Ruby命令行脚本不连续执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30063325/