h <- function(x) {
x <- 10
UseMethod("h")
}
h.character <- function(x){ paste("char", x)}
h.numeric <- function(x) { paste("num", x)}
h("a")
Приведенный выше код выведет:
[1] "char a"
Мои дедуктивные рассуждения, приведенные ниже, говорят, что на выходе должно быть "char 10".
Согласно документации по методу использования:
Найти контекст для вызывающей функции (универсальный): это дает нам неоцененные аргументы для исходного вызова.
Оцените объект (обычно аргумент), который будет использоваться для отправки, и найдите метод (возможно, метод по умолчанию) или сгенерируйте ошибку.
Создайте среду для оценки метода и вставьте специальные переменные (см. Ниже) в эту среду. Также скопируйте любые переменные в среде универсального, которые не являются формальными (или фактическими) аргументами.
Исправьте список аргументов, чтобы они соответствовали аргументам вызова, соответствующим формальным значениям метода.
Если я правильно понимаю, на шаге 2 x будет оцениваться как 'a' Но затем на шаге 3 другая переменная x со значением 10 вставляется в среду для выполнения метода.
Разве это не переопределило бы x сейчас 10? И, наконец, на шаге 4 аргументы сопоставляются с аргументами метода. Итак, x, равное 10, теперь является аргументом метода.
Что я не так поняла