Ruby: как проверить, существует ли переменная в определении хэша

#ruby #hash #if-statement

#ruby #хэш #if-оператор

Вопрос:

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

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

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

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

Комментарии:

1. Не могли бы вы попытаться объяснить немного больше? Я прочитал ваш вопрос три раза и до сих пор не понимаю, в чем ваша проблема.

Ответ №1:

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

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

Ответ №2:

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

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

hash[:key1].call
 

http://www.ruby-doc.org/core-1.9.2/Kernel.html#method-i-lambda

Комментарии:

1. Спасибо за это. Только что обнаружил, что добавление круглых скобок делает то, что я искал…. hash = {:key1 => (defined? value1) ? value1 : nil}

Ответ №3:

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

hash[:key].nil?

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