我可以在红宝石中什么都不返回吗?
仅用于教育目的
例如:
myarray = [1,2,3]
myarray << some_method
def some_method
if Date.today.day > 15
return "Trololo"
else
return __NOTHING__
end
end
因此,如果今天是3月11日myarray
将不会添加新项目。我不想nil
- 因为nil
并非一无所获:)
我理解,我可以使用if | unless
语句,例如myarray << some_method if some_method
等。我想了解我可以返回没有,或者每次在ruby中我都会返回某事(至少我能得到的是Nil Object)
答案 0 :(得分:21)
基本上,您要找的是语句。但Ruby没有语句,只有表达式。 Everything 是一个表达式,即一切都返回一个值。
答案 1 :(得分:10)
不,你什么都不能回报。在红宝石中,你总是会返回一些东西(即使它只是nil
) - 没有办法解决这个问题。
答案 2 :(得分:5)
你不能从ruby中的方法返回“nothing”。正如您所指出的,您可以有条件地向阵列添加元素。您还可以在数组上调用.compact以删除所有nil元素。
答案 3 :(得分:5)
你无法用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
这很难看,但适用于您的样本。 (没有什么是对象。)
答案 4 :(得分:2)
从我所知道的东西中没有任何东西可以表达任何东西:)你可以尽可能地定义自己的东西并尽可能地抛出它。在ruby中,如果没有显式返回某些内容,则返回最后一个计算表达式。
答案 5 :(得分:0)
您可以使用例外模拟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) }
然而,可能不是一个好主意......