Не удается получить доступ к хешу trollop :: options с помощью ключей? - PullRequest
0 голосов
/ 05 января 2011

Я пытаюсь разобрать командную строку с библиотекой ruby ​​Trollop.

#!/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"]

Это вывод:

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

При печати хеша с opts.each я вижу, что есть ключи с именами src и destценности то, что я ожидаю.Однако почему доступ к значениям хеша с помощью opts["src"] возвращает ноль?

1 Ответ

1 голос
/ 05 января 2011

зетик правильный, ключ символ.

И фактически Enumerable#each действительно дал символ для вашего блока, но при печати через #{...}, Ruby вызывает to_s, который определен для символа, и возвращает простое имя.

Вы можете сказать, что Ruby называется to_s для интерполяции строки с тестом с одним строком:

>> "ok, #{class A; def to_s; "what fun"; end; self; end.new}, done"
=> "ok, what fun, done"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...