首页 > 解决方案 > “通用”和“方法”之间的区别?

问题描述

我注意到 R 中的以下函数有两个略有不同的分类:

sloop::ftype(t.test)
#> [1] "S3"      "generic"

sloop::ftype(t.data.frame)
#> [1] "S3"     "method"

reprex 包于 2021-04-21 创建(v1.0.0)

一个是“泛型”,一个是“方法”,但我正在努力区分这两者:我对“泛型”的理解是它一种方法 - 具体来说,一种根据输入对象作用于输入对象的方法班级。

标签: rr-s3

解决方案


一个方法实现了一个泛型(或者,在更技术的层面上,一个方法被一个泛型 via 调用UseMethod)。

也就是说,一个通用函数调用UseMethod; 它可能看起来像这样:

foo = function (x, ...) UseMethod('foo')

方法是实现特定 S3 类的泛型的函数;例如:

foo.bar = function (x, ...) message('class of x is bar!')

推荐阅读