“通用”和“方法”之间的区别?

问题描述

我注意到 R 中的以下函数有两种稍微不同的分类

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

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

reprex package (v1.0.0) 于 2021 年 4 月 21 日创建

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

解决方法

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

即泛型函数调用UseMethod;它可能看起来像这样:

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

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

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