Краткая версия:
Number
- это «базовый класс» для чисел;не фактическое числовое значение.Вы не можете использовать его для математических операций.self
представляет объект, на который был вызван ваш метод, и это число, которое вы хотите использовать в качестве числителя в своем подразделении.
Более длинная версия:
Сначала немного предыстории: деление, как вы знаете, принимает два аргумента.Метод, который вы определяете, принимает только один аргумент (x
).Другой аргумент неявный, и это номер, на который вы вызываете деление.Чтобы было кристально ясно, когда вы пишете a / b
, метод /
вызывается для объекта a
и ему передается значение b
в качестве параметра.На более C-подобном языке вы бы сказали что-то вроде a.divide(b)
.Вы не передаете a
в качестве параметра, но в любом случае он доступен из функции, как self
.
Итак, используя то, что мы знаем сверху, запись self oldSlash(x)
выполняет деление с использованием self
в качестве числителя и x
в качестве знаменателя.Значение self
устанавливается, когда вызывается ваш метод "newSlash", еще раз неявно для объекта, для которого вы вызываете метод.Если вы знакомы с JavaScript, self
- это имя Ио для this
.
Когда вместо этого вы пишете Number oldSlash(x)
, вы используете объект Number
в качестве числителя в подразделении.Number
это не фактическое число, а "базовый класс" для всех чисел.Это не имеет значения.Следовательно, вы не можете выполнять математические операции над ним.