Следующее не будет работать в качестве определения метода (если мы не определяем одноэлементный метод для the
):
def the.dot
:dot
end
Но с Module # define_method
все работает нормально:
define_method('the.dot') { :dot }
#=> :"the.dot"
method('the.dot')
#=> #<Method: main.the.dot>
Вызов обычным способом вызовет исключение:
the.dot
#=> NameError: undefined local variable or method `the' for main:Object
Но есть способы вызвать этот метод:
method('the.dot').call
#=> :dot
public_send('the.dot')
#=> :dot
Почему define_method
игнорирует правила именования методов, разрешая почти что-либо быть именем метода?