Вызов is_fun
в конце класса вызывает статический метод. Статический метод затем определяет метод fun?
внутри класса FOWA. Затем вы можете сделать это:
f = FOWA.new
f.fun?
Если вы выполните вызов is_fun
в конце класса, метод fun?
не будет определен.
Он упомянул, что вы не будете использовать его таким образом, но дело в том, насколько легко динамически добавлять метод в класс. Вы можете использовать его следующим образом, если хотите, чтобы метод был доступен в подклассах, и вы бы не вызывали is_fun
в FOWA, но вы могли бы использовать его в подклассе. Будет немного интереснее, если у вас есть параметр для is_fun
и определение fun?
меняется в зависимости от этого параметра.
Это также ведет прямо к modules
, поскольку вы можете определить module
с помощью того же метода is_fun
, а затем просто иметь свой класс extend
module
и методы в module
доступны в класс. Вы бы использовали эту технику, если хотите, чтобы ваш метод был доступен не только подклассам FOWA.