Ruby эквивалентно С#?? оператор

Возможный дубликат:
С#?? оператора в Ruby?

Есть ли оператор Ruby, который выполняет то же самое, что и оператор С# ???

Оператор ?? возвращает левый операнд, если он не является нулевым, иначе он возвращает правый операнд.

из http://msdn.microsoft.com/en-us/library/ms173224.aspx

Ответы

Ответ 1

Имя оператора - оператор null-coalescing. Исходное сообщение в блоге, которое я связывал с тем, которое касалось различий в нулевом коалесценции между языками, было снято. Более новое сравнение между С# и нулевым коалесцированием Ruby можно найти здесь.

Короче говоря, вы можете использовать ||, как в:

a_or_b = (a || b)

Ответ 2

Если вы не против коалесцировать ложь, вы можете использовать || Оператор:

a = b || c

Если false может быть допустимым значением, вы можете сделать:

a = b.nil? ? c : b

Где b проверяется на nil, и если это так, a присваивается значение c, а если нет, b.

Ответ 3

Имейте в виду, что Ruby имеет специальные функции для обычного нулевого коаллеции с [] или 0 или 0.0.

Вместо

x = y || [] # or...
x = y || 0

... вы можете (потому что NilClass реализует их) просто...

x = y.to_a # => [] or ..
x = y.to_i # or .to_f, => 0

Это создает определенные общие шаблоны проектирования, например:

(x || []).each do |y|

... Посмотрите немного лучше:

x.to_a.each do |y|