2017-10-09 2 views
1

Ich muss einen Code schreiben, der auf Ruby 1.8 und Ruby 2.1 ausgeführt werden muss, und speziell eine Datei in UTF-8-Codierung öffnen, so dass ich naiv schrieb dassRückwärtskompatibilitätscode für Ruby 1.8 und Ruby 2.1 funktioniert nicht Dateimodul

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 

Während es auf Rubin 2.1, ruby ​​1.8 läuft der Code funktioniert sollte es nicht und gibt diesen Fehler zurück

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 

ich es hat einige grundlegende boolean, dass bei dem Test laufen, es funktioniert

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 

Kann mir jemand das Problem erklären und wie kann ich es lösen?

dank

Antwort

4

Der Code vor der Ausführung analysiert wird, und wird als Ganzes analysiert, so Syntaxfehler werden nicht einmal in totem Code erlaubt.

Lösung für Ihr Problem würde mit alter Syntax für Hashes sein, damit Ihr Code soll wie folgt aussehen:

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 
Verwandte Themen