S3 方法的正确实现:我什么时候应该使用省略号?

克里斯托夫

我意识到使用 S3 类结构的好处。是否有任何建议使用哪个变体:

  1. fun.class1 <- function(x, ...)
  2. fun.class2 <- function(x)

看来,他们总是同时工作......

可重现的例子:

fun.default <- function(x) {
  print("default")
  return(x)
}
fun.class1 <- function(x, ...) {
  print("class1 ellipsis")
  res <- x[y]
  return(res)
}
fun.class2 <- function(x) {
  print("class2 only x")
  res <- x[y]
  return(res)
}
my_fun <- function(x) {
  res <- UseMethod("fun")
  return(res)
}

x <- structure(c(1, 2), class = c("numeric", "class1"))
y <- 1
my_fun(x)
# [1] "class1 ellipsis"
# [1] 1
x <- structure(c(1, 2), class = c("numeric", "class2"))
y <- 1
my_fun(x)
# [1] "class1 ellipsis"
# [1] 1
符号高峰

简而言之:

使您的接口尽可能小。

转换为您的省略号问题:仅在您真正需要时使用省略号


恕我直言,您应该只在真正使用省略号时才引入省略号。我能想到我目前看到的三个案例:

  1. 你的一些 S3 类需要其他人不需要的参数;
  2. 您的部分(或全部)S3 课程使用非标准评估来评估某些参数。因此,您可能需要一个能够容忍不断变化的参数数量的接口;
  3. @Roland 指出要容忍指定未使用参数的用户。

简而言之,我建议如下:

只要您正在编写主要由您自己使用或由另一个函数调用的 S3 类:不要仅仅因为将来某天可能会使用它而引入任何省略号参数。只介绍你真正使用的参数。一旦需要上述用例之一,请立即引入省略号。

希望这可以帮助。


而另一条线索:看来,他们总是工作都..不,我不这么认为。在您的示例中,它们全部起作用,因为它们y在全局环境中找到另请参见此处据我所知,您应该将这两个版本my_fun(x, ...)分别视为my_fun(x, y)..

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我什么时候应该在Windows上使用3rd party卸载程序?

来自分类Dev

我应该将S3还是S3 + Clouldfront用于照片共享网站

来自分类Dev

如何实现S3类的名称?

来自分类Dev

S3主题的R绘图方法

来自分类Dev

在 R 中创建 S3 方法

来自分类Dev

使用Fastlane上传到S3

来自分类Dev

使用AWS S3 vs Cloudfront

来自分类Dev

使用Lambda从S3读取数据

来自分类Dev

使用Cloudformation启用S3库存

来自分类Dev

S3使用PUT代替POST

来自分类Dev

何时使用S3 API分页

来自分类Dev

多区域网站使用S3

来自分类Dev

你什么时候想让 s3 对象键类似

来自分类Dev

AWS :: S3 :: Errors :: AccessDenied。无法使用Ruby on Rails保存到S3

来自分类Dev

单独使用AWS S3或S3和Cloudfront进行视频下载

来自分类Dev

使用PHP s3类无法将视频文件上传到s3

来自分类Dev

使用terraform template_file和s3与s3一起引导

来自分类Dev

单独使用AWS S3或S3和Cloudfront进行视频下载

来自分类Dev

s3 初学者 - 如何使用新的 s3 结构?

来自分类Dev

无法让Paperclip正确设置我的S3 URL

来自分类Dev

我们什么时候使用Element?我们什么时候使用Helper?我们什么时候使用View Cells?在CakePHP 3中

来自分类Dev

使用tinys3上传到Amazon S3

来自分类Dev

s3使用boto3.client删除密钥

来自分类Dev

使用 cakephp 3 上传 AWS S3 文件

来自分类Dev

无法从仅使用s3a的s3协议的S3存储桶中读取

来自分类Dev

我怎么知道什么s3 bucketlessless用于部署?

来自分类Dev

使用s3连接和s3挂钩在Airflow上创建boto3 s3客户端

来自分类Dev

使用s3连接和s3挂钩在Airflow上创建boto3 s3客户端

来自分类Dev

s3cmd在使用s3cmd时询问S3 URI