【问题标题】:Function argument matching: by name vs by position函数参数匹配:按名称与按位置
【发布时间】:2017-07-31 20:09:42
【问题描述】:

这几行代码有什么区别?

mean(some_argument)

mean(x = some_argument)

输出是一样的,但是明确提到x有什么好处吗?

【问题讨论】:

  • 这在许多编程语言中普遍适用。当您按名称引用参数时,您可以任意重新排序参数并仍然产生所需的结果。有时这很有用,而且通常更安全。此外,如果一个参数很少使用,或者您希望对代码的未来读者(包括从现在起 2 个月后的您)明确,添加名称可以更容易阅读。
  • @lmo 为什么不添加这个作为答案?
  • @RomanLuštrik 好的。我将评论扩展为答案。

标签: r function arguments


【解决方案1】:

人们通常不会为常用参数添加参数名称,例如 mean 中的 x,但在删除缺失值时几乎总是引用 na.rm 参数。

虽然忽略参数名称会使代码紧凑,但这里有四个(相关的)原因包括参数名称而不是依赖于它们的位置。

  1. 根据需要重新排序参数。 当您按名称引用参数时,您可以任意重新排序参数并仍然产生所需的结果。有时重新排序你的论点很有用。例如,在其中一个参数上运行循环时,您可能更愿意将循环参数放在函数的前面。
  2. 它通常更安全/更面向未来。 例如,如果某些用户编写的函数或包在更新中重新排序参数,并且您依赖于参数的位置,这将破坏你的代码。在最好的情况下,你会得到一个错误。在最坏的情况下,该函数会运行,但会产生不正确的结果。包含参数名称可以大大降低遇到任何一种情况的机会。
  3. 为了更清晰的代码。如果一个参数很少使用,或者你想对你的代码的未来读者(包括从现在起 2 个月后的你)来说是明确的,添加名称可以使阅读更容易。李>
  4. 能够跳过参数。如果您只想更改第三个参数,那么通过名称引用它可能更可取。

另请参阅R Language Definition: 4.3.2 Argument matching

【讨论】:

  • 这是一个很好的解释。谢谢!
猜你喜欢
  • 2016-08-23
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多