Ruby: как проверить, существует ли переменная в определении хеша - PullRequest
2 голосов
/ 26 октября 2011

Я новичок в Ruby.Есть ли способ сделать следующее?

hash = {
  :key1  => defined? value1 ? value1 : nil, 
  :key2  => defined? value2 ? value2 : nil
}

puts hash[:key1] # outputs: ["expression"]

Приведенный выше код сохраняет выражение вместо значения (если оно определено) или nil (если это не определено).

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

d11wtg ответ подойдет.Также, добавляя скобки, значения сохраняются, как и ожидалось:

hash = {
  :key1  => (defined? value1) ? value1 : nil, 
  :key2  => (defined? value2) ? value2 : nil
}
1 голос
/ 26 октября 2011

Вы ищете lambda или Proc.

hash = {
  :key1 => lambda { defined?(value1) ? value1 : nil },
  :key2 => lambda { defined?(value2) ? value1 : nil }
}

hash[:key1].call

http://www.ruby -doc.org / ядро-1.9.2 / Kernel.html # метод-я лямбда

0 голосов
/ 26 октября 2011

Что именно вы хотите сделать?

hash [: key] .nil?

вернет true или false, в зависимости от того, существует ли ключ.Не уверен, что это то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...