Frage

Ich versuche, die Befehlszeile mit der Ruby-Bibliothek Trollop zu analysieren.

#!/usr/bin/ruby

require 'net/http'
require 'trollop'

opts = Trollop::options do
  opt :src, "src lang", :short => 'i', :type => String
  opt :dest, "dest lang", :short => 'o', :type => String
end

opts.each do |key,val|
  puts "#{key}: #{val}"
end

print opts["src"]
print opts["dest"]

Dies ist die Ausgabe:

$ ./translate.rb --src he --dest th  
dest_given: true
src: he
dest: th
help: false
src_given: true
nilnil

Wenn Sie mit opts.each den Hash-Druck aus, kann ich sehen, gibt es Tasten genannt src und dest, und ihre Werte sind das, was ich erwarte. Doch warum Zugriff auf die Hash-Werte mit opts["src"] return null?

War es hilfreich?

Lösung

zetetic korrekt ist, ist der Schlüssel zu einem Symbol.

Und in der Tat Enumerable#each tat ein Symbol zu dem Block ergeben, aber wenn es über #{...} Druck Ruby ruft to_s, die für Symbol definiert und es gibt die Klarnamen.

Sie können sagen, dass Ruby to_s für String-Interpolation mit einem Einzeiler Test genannt wird:

>> "ok, #{class A; def to_s; "what fun"; end; self; end.new}, done"
=> "ok, what fun, done"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top