Ответ 1
В принципе, то, что вы ищете, - это утверждение. Но Ruby не имеет операторов, а только выражений. Все это выражение, т.е. Все возвращает значение.
Могу ли я вернуть ничего в рубине?
Только для образовательной цели
Например:
myarray = [1,2,3]
myarray << some_method
def some_method
if Date.today.day > 15
return "Trololo"
else
return __NOTHING__
end
end
Итак, если сегодня 11 марта myarray
не добавит новый элемент. Я не хочу nil
- потому что nil
не является ничем:)
И я понимаю, что могу использовать оператор if | unless
, например myarray << some_method if some_method
и т.д. Я хочу понять, могу ли я вернуть ничего или каждый раз в ruby Я возвращаю что-то (по крайней мере, я могу получить объект Nil)
В принципе, то, что вы ищете, - это утверждение. Но Ruby не имеет операторов, а только выражений. Все это выражение, т.е. Все возвращает значение.
Нет, вы ничего не можете вернуть. В рубине вы всегда возвращаете что-то (даже если это просто nil
) - никак не обойти это.
Вы не можете вернуть "ничего" из метода в ruby. Как вы указываете, вы можете условно добавить элементы в свой массив. Вы также можете вызвать .compact на свой массив, чтобы удалить все элементы nil.
Вы не можете вернуть реальное Nothing с Ruby. Все это объект. Но вы можете создать подделку. Ничего не сделать. См:
Nothing = Module.new # Same as module Nothing; end
class Array
alias old_op_append <<
def <<(other)
if other == Nothing
self
else
old_op_append(other)
end
end
end
Это некрасиво, но работает в вашем примере. (Ничто не остается объектом).
Ничто не означает ничего, чтобы рубить из того, что я знаю:) Вы можете сами определить свое собственное и бросить его как можно больше. В ruby, если вы явно ничего не возвращаете, возвращается последнее оцениваемое выражение.
Вы можете имитировать Nothing с исключениями.
class NothingError < RuntimeError
end
def nothing
raise NothingError
end
def foo x
if x>0 then x else nothing end
end
def nothingness
begin
yield
rescue NothingError
end
end
a = [1,2,3]
nothingness { a << foo(4) }
nothingness { a << foo(0) }
Наверное, это не отличная идея...