Разница между «общим» и «методом»?

#r #r-s3

Вопрос:

Я заметил, что следующие функции в R имеют две несколько разные классификации:

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

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

Создано 2021-04-21 пакетом reprex (v1.0.0)

Один из них является «общим», а другой — «методом», но я изо всех сил пытаюсь различить их: мое понимание «общего» заключается в том, что это метод-в частности, метод, который действует на входной объект в соответствии с его классом.

Ответ №1:

Метод реализует универсальный (или, на более техническом уровне, метод вызывается универсальным через UseMethod ).

То есть вызывается универсальная функция UseMethod ; это может выглядеть примерно так:

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

В то время как метод-это функция, которая реализует универсальный для определенного класса S3; например:

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

Комментарии:

1. А, я вижу! Итак, в вашем примере вы определили реализацию универсального foo для класса S3 bar ? И вы могли бы написать больше реализаций универсального для других классов S3, верно?

2. @Джонни, да, именно так.