Ruby什么都不返回?

fl0*_*00r 18 ruby

红宝石可以不归还吗?

仅用于教育目的

例如:

myarray = [1,2,3]
myarray << some_method

def some_method
  if Date.today.day > 15
    return "Trololo"
  else
    return __NOTHING__
  end
end
Run Code Online (Sandbox Code Playgroud)

因此,如果今天是3月11日myarray将不会添加新项目.我不想nil- 因为nil不是没有:)

我明白了,我可以使用if | unless的语句像myarray << some_method if some_method等.我想了解我能回报什么的红宝石或每次我回来的东西(至少我可以得到的是无对象)

Jör*_*tag 21

基本上,你要找的是一个声明.但Ruby没有语句,只有表达式.一切都是表达,即一切都返回一个价值.


sep*_*p2k 10

不,你什么都不能回报.在红宝石中,你总是会返回一些东西(即使只是它nil) - 没办法.

  • 也就是说,"nil"应该代表"没有"的概念. (8认同)

til*_*ryj 6

你不能从ruby中的方法返回"nothing".正如您所指出的,您可以有条件地向阵列添加元素.您还可以在数组上调用.compact以删除所有nil元素.


Gui*_*nal 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
Run Code Online (Sandbox Code Playgroud)

这很丑,但适用于您的样本.(没有什么是对象.)