Ruby cmd 行脚本非连续执行代码
Ruby cmd line script executes code non-consecutively
我已经构建了一个 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 脚本文件时,比如 ruby 1.8.7,脚本爆炸并出现以下错误:
$ 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'}
编写,因为 shorthand { option: '' }
仅在 ruby 1.9
中引入
为了更好地解释它,ruby 必须在对文件执行任何操作之前解析整个文件。所以你的版本检查不会被执行,因为你的文件有无效的 ruby 1.8 语法。
我已经构建了一个 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 脚本文件时,比如 ruby 1.8.7,脚本爆炸并出现以下错误:
$ 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'}
编写,因为 shorthand { option: '' }
仅在 ruby 1.9
为了更好地解释它,ruby 必须在对文件执行任何操作之前解析整个文件。所以你的版本检查不会被执行,因为你的文件有无效的 ruby 1.8 语法。