Ruby Double Pipes Назначение - PullRequest
       14

Ruby Double Pipes Назначение

1 голос
/ 25 октября 2019

Только что споткнулся о непонятной инструкции:

a = 5 || 3                       # ==> 5
verdict = true || false          # ==> true

Поскольку || совпадает с or, как и / или почему будет использоваться это утверждение? Это действительно не демонстрирует никакого решения, кроме выбора первого варианта всегда.

Я знаю назначение ||=, но это другое. Нужны разъяснения по поводу использования выше только ||.

1 Ответ

2 голосов
/ 25 октября 2019
a = b || c

Что делает этот оператор, он говорит Ruby 'присваивать значение b a, если b не ложно, если b ложно, присвойте значение cдо a. В случае, если b не ложно, оператор c не будет выполнен.

Хороший пример, где вы можете использовать это, если вы получаете переменную откуда-то, а вы неУбедитесь, что он будет равен нулю или нет, поэтому вы создаете переменную, например c, в качестве второй опции.

Если у вас есть метод, который принимает хеш в качестве параметра, например, и вы хотитенапример, вернуть значение элемента из хеша, который имеет ключ 'b', но параметр хеша не всегда будет иметь ключ 'b', поэтому вы пишете что-то вроде этого

def value_of_b(hash)
  b_val = hash['b'] || 'unknown'
  puts "The value of b is :#{b_val}"
end

h = {'a' => 1, 'b' => 2}

value_of_b(h)
#=>The value of b is :2

m = {'a' => 1}

value_of_b(m)
#=>The value of b is :unknown

ДругойПример, который мне приходит в голову, - это доступ к элементу массива, который не существует

[1,2,3][3] || "default"
#=> "default"

Или наличие значения по умолчанию для хэша параметров Rails:

@name = params[:name] || "no name provided"
...