Проверка, если переменная определена? - PullRequest
563 голосов
/ 14 ноября 2008

Как я могу проверить, определена ли переменная в Ruby? Есть ли метод isset типа?

Ответы [ 14 ]

3 голосов
/ 08 января 2017

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

Но если вам абсолютно необходим логический тип. Используйте! (bang bang) или "ложная ложь раскрывает правду".

› irb
>> a = nil
=> nil
>> defined?(a)
=> "local-variable"
>> defined?(b)
=> nil
>> !!defined?(a)
=> true
>> !!defined?(b)
=> false

Почему обычно не принуждают к принуждению:

>> (!!defined?(a) ? "var is defined".colorize(:green) : "var is not defined".colorize(:red)) == (defined?(a) ? "var is defined".colorize(:green) : "var is not defined".colorize(:red))
=> true

Вот пример, где это важно, потому что оно опирается на неявное приведение логического значения к его строковому представлению.

>> puts "var is defined? #{!!defined?(a)} vs #{defined?(a)}"
var is defined? true vs local-variable
=> nil
2 голосов
/ 12 декабря 2014

Обратите внимание на различие между «определен» и «назначен».

$ ruby -e 'def f; if 1>2; x=99; end;p x, defined? x; end;f'
nil
"local-variable"

x определено, хотя оно никогда не назначается!

0 голосов
/ 17 мая 2018

defined? отлично, но если вы находитесь в среде Rails, вы также можете использовать try, особенно в случаях, когда вы хотите проверить имя динамической переменной:

foo = 1
my_foo = "foo"
my_bar = "bar"
try(:foo)        # => 1
try(:bar)        # => nil
try(my_foo)      # => 1
try(my_bar)      # => nil
0 голосов
/ 23 октября 2015

Кроме того, вы можете проверить, определено ли оно в строке в результате интерполяции, если вы наберете:

puts "Is array1 defined and what type is it? #{defined?(@array1)}"

Система сообщит вам тип, если он определен. Если он не определен, он просто выдаст предупреждение о том, что переменная не инициализирована.

Надеюсь, это поможет! :)

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