R中的隐式变量

时间:2017-12-23 20:01:08

标签: r scala

在scala中,我们有implicit variable或参数的概念,在许多情况下,虽然有时令人困惑,但它可以很方便。问题是:

  1. R?
  2. 中是否存在类似隐含变量的内容
  3. 如果没有,在调用R中的某个函数时,是否可以实现与scala隐式参数相同的行为?

2 个答案:

答案 0 :(得分:2)

从评论中移出。

如果我理解正确,函数的隐式参数是一个函数参数,如果在调用函数时没有指定,则默认为与该参数的类型相关联的默认值,并且对于该类型的所有实例只能存在一个这样的默认值在任何时候;但是,R中的参数没有类型 - 它们都是动态的。一个不写f <- function(int x) ...但只写f <- function(x) ...

我想有一个约定integerDefault是与整数类型相关的默认值:

f <- function(x = integerDefault) x
g <- function(y = integerDefault) y + 1L

integerDefault <- 0L
f()
## [1] 0
g()
## [1] 1

没有什么可以阻止您将双倍传递给fg,但

  • 如果你没有传递任何东西,那么你得到的默认整数看起来类似于scala和
  • 在任何时候都只能有一个这样的默认值,因为它们都使用与scala类似的相同名称。还
  • 如果没有为integerDefault分配值,则函数失败,这也与scala类似。

请注意integerDefault将在词汇上查找 - 而不是在调用者中查找。

答案 1 :(得分:0)

我不确定所需的行为是什么。从您链接的站点的第一段开始,它似乎只是未提供给该函数的参数的默认参数设置。这一直用在R中:

> f <- function(x=10) print(x)
> f()
[1] 10

这是你的意思吗?