为什么ruby中的splat参数不是一直使用的?

poo*_*ank 5 ruby splat

我知道当我们不知道将传递的参数数量时,会使用splat参数.我想知道我是否应该一直使用splat.每当我传递参数时,使用splat参数是否有任何风险?

Fre*_*ung 18

当您正在编写的方法真正需要具有任意数量的参数时,对于诸如此类的方法,splat非常有用Hash#values_at.

一般来说,如果一个方法实际上需要固定数量的参数,那么使用命名参数要比传递数组更清楚,并且必须记住哪个位置服务于哪个目的.例如:

def File.rename(old_name, new_name)
  ...
end
Run Code Online (Sandbox Code Playgroud)

比以下更清楚:

def File.rename(*names)
  ...
end
Run Code Online (Sandbox Code Playgroud)

您必须阅读文档以了解旧名称是第一个还是第二个.在方法内部,File.rename需要围绕是否传递了正确数量的参数来实现错误处理.因此,除非您需要splat,否则"正常"参数通常更清晰.

关键字参数(ruby 2.0中的新增功能)在使用时可以更加清晰,尽管它们在标准库中的使用尚未普及.

  • +1"......真正需要......"这是一个关键词.在我看来,人为地一直使用"*","只是因为",会产生维护问题并导致更少惯用的Ruby代码. (2认同)