Ruby什么都不返回?

时间:2011-03-10 23:55:45

标签: ruby

我可以在红宝石中什么都不返回吗?

仅用于教育目的

例如:

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)

6 个答案:

答案 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) }

然而,可能不是一个好主意......

相关问题