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|