问题描述
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!')