#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
для класса S3bar
? И вы могли бы написать больше реализаций универсального для других классов S3, верно?2. @Джонни, да, именно так.