ruby 1.8 和 ruby 2.1 的向后兼容代码不适用于文件模块
backward-compatibily code for ruby 1.8 and ruby 2.1 not working on File module
我需要在 ruby 1.8 和 ruby 2.1 上写一些需要 运行 的代码,特别是用 UTF-8 编码打开一个文件,所以我天真地写了
if RUBY_VERSION > "1.9"
f = File.open('/usr/share/hwdata/pci.ids', encoding: "utf-8")
else
f = File.open('/usr/share/hwdata/pci.ids')
end
虽然它适用于 ruby 2.1,ruby 1.8 运行s 代码它不应该 运行 和 returns 这个错误
test_ruby_version.rb:8: syntax error, unexpected ':', expecting ')'
f = File.open('/usr/share/hwdata/pci.ids', encoding: "utf-8")
^
test_ruby_version.rb:8: syntax error, unexpected ')', expecting kEND
我做了一些基本的布尔测试,这样它就可以正常工作了
if RUBY_VERSION > "1.9"
puts "this is displayed when running ruby 2"
end
if RUBY_VERSION < "2.0"
puts "this is displayed when running ruby 1.9 or less"
end
if RUBY_VERSION < "1.8"
puts "this is displayed when running ruby 1.7 or less"
end
有人可以向我解释这个问题以及如何解决吗?
谢谢
代码在执行前解析,整体解析,即使是死代码也不允许出现语法错误。
您的问题的解决方案是对哈希使用旧语法,因此您的代码应如下所示:
if RUBY_VERSION > "1.9"
f = File.open('/usr/share/hwdata/pci.ids', :encoding => "utf-8")
else
f = File.open('/usr/share/hwdata/pci.ids')
end
我需要在 ruby 1.8 和 ruby 2.1 上写一些需要 运行 的代码,特别是用 UTF-8 编码打开一个文件,所以我天真地写了
if RUBY_VERSION > "1.9"
f = File.open('/usr/share/hwdata/pci.ids', encoding: "utf-8")
else
f = File.open('/usr/share/hwdata/pci.ids')
end
虽然它适用于 ruby 2.1,ruby 1.8 运行s 代码它不应该 运行 和 returns 这个错误
test_ruby_version.rb:8: syntax error, unexpected ':', expecting ')'
f = File.open('/usr/share/hwdata/pci.ids', encoding: "utf-8")
^
test_ruby_version.rb:8: syntax error, unexpected ')', expecting kEND
我做了一些基本的布尔测试,这样它就可以正常工作了
if RUBY_VERSION > "1.9"
puts "this is displayed when running ruby 2"
end
if RUBY_VERSION < "2.0"
puts "this is displayed when running ruby 1.9 or less"
end
if RUBY_VERSION < "1.8"
puts "this is displayed when running ruby 1.7 or less"
end
有人可以向我解释这个问题以及如何解决吗?
谢谢
代码在执行前解析,整体解析,即使是死代码也不允许出现语法错误。
您的问题的解决方案是对哈希使用旧语法,因此您的代码应如下所示:
if RUBY_VERSION > "1.9"
f = File.open('/usr/share/hwdata/pci.ids', :encoding => "utf-8")
else
f = File.open('/usr/share/hwdata/pci.ids')
end