2017-10-09 5 views
1

ruby​​ 1.8とruby 2.1で動作するコードを書く必要があり、特にUTF-8エンコーディングでファイルを開く必要があるので、ruby​​ 1.8とruby 2.1のbackward-compatibilyコードがファイルモジュールで動作していない

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 

それはルビー2.1、ルビー1.8実行それが実行すべきではありませんコードを返す。このエラーで動作している間は

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 

誰かに問題の説明と解決方法を教えてもらえますか?

おかげ

答えて

4

コードが実行される前に解析され、全体として解析されるので、構文エラーもデッドコードでは使用できません。あなたのコードは次のようになりますので、あなたの問題へ

ソリューションは、ハッシュの古い構文を使用して次のようになります。

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 
関連する問題