我的问题是关于传递函数参数的两种方法之间的区别
例如
function1(obj1, obj2, obj3, obj4, obj5)
或
function1(arg1=obj1, arg2=obj2, arg3=obj3, arg4=obj4, arg5=obj5)
是否有规则/惯例/文件?
我至少可以看到第一种方式并不好的两种情况
有关于此的任何想法吗?
答案 0 :(得分:3)
对我来说,问题很简单:可重复的结果需要可重现的显式函数调用。
在我的情况下,我使用命名参数了解到另一个人可能会在他们的函数中插入一个新参数,如果他们这样选择,这会导致我的代码中断。
我也倾向于将参数存储在列表中,并在调用函数时使用这些参数,例如: someCrazyFunction(stuff = stuff, eps = Par$eps, tol = Par$tol, verbose = Par$verbose, strict = Par$strict, debug = Par$debug)
如果我不这样做,我不会尽我所能来确保可重复的结果。它只是几个按键,我不必担心函数或包的作者是否移动参数,插入新参数,删除一些参数(我会注意到,因为R会告诉我不需要某些对象),或以其他方式做出看似无害的变化。如果他们做出这样的改变,那么查看我的代码的其他人怎么能确定如何重现与我制作时相同的呼叫呢?
课程:调试比确保重现性所需的几次击键更痛苦。
(次要更新)This question & the selected answer from elsewhere on SO举例说明了包创建者与具有依赖包的人之间的隐式契约的特定方面。如果我开发了对给定函数的依赖,并且作者只是简单地改变了参数,那么我的代码应该完美地工作。他们没有明确的合同也没有动议,我不能假设它会以这种方式行事。我只假设他们不会改变论证的定义。
答案 1 :(得分:2)
从函数实现者的角度来看,您必须始终在末尾添加新参数并对其进行命名,以使它们没有与现有参数相同的前缀。
这是因为人们可以自由使用位置匹配和部分名称。 R life的事实......
答案 2 :(得分:1)
R中的函数参数可以通过位置或名称进行匹配,并且当您决定使用或滥用它时,您可以灵活地为键入内容的人提供一些灵活性。使用命名参数的一个直接好处是,您可以根据需要更改函数中参数的顺序。即。
function1(arg1=obj1, arg2=obj2, arg3=obj3, arg4=obj4, arg5=obj5)
和
function1(arg5=obj5, arg4=obj4, arg3=obj3, arg2=obj2, arg1=obj1)
将以同样的方式评估,而
function1(obj1, aobj2, obj3, obj4, obj5)
和
function1(obj5, aobj4, obj3, obj2, obj1)
不会。函数参数也可以部分匹配,并使用以下标准进行匹配:
如果你不小心部分匹配,这显然会导致一些意想不到的后果。我相信如果一个参数与名称匹配,它将从位置搜索中“删除”,但我目前找不到具体的参考。作为一个常用的注释,我倾向于看到人们在函数中使用位置匹配作为第一个参数,然后按名称指定其他可能是可选的后缀。同样,就我而言,这主要是个人惯例和习惯。
答案 3 :(得分:0)
在像R这样的函数式编程中,函数可以有三十个或一些参数。在这种情况下,参数名称可以使用默认参数值。
除此之外,特别是对于参数的简短列表,参数名称没有多大意义。