在scala中,我们有implicit variable或参数的概念,在许多情况下,虽然有时令人困惑,但它可以很方便。问题是:
答案 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
没有什么可以阻止您将双倍传递给f
和g
,但
integerDefault
分配值,则函数失败,这也与scala类似。请注意integerDefault
将在词汇上查找 - 而不是在调用者中查找。
答案 1 :(得分:0)
我不确定所需的行为是什么。从您链接的站点的第一段开始,它似乎只是未提供给该函数的参数的默认参数设置。这一直用在R中:
> f <- function(x=10) print(x)
> f()
[1] 10
这是你的意思吗?