Определение методов на экземплярах Fixnum
Я могу определить метод для экземпляра следующим образом:
object = Object.new
def object.foo
puts "5"
end
Пытаясь что-то подобное с Fixnum
не работает:
def 3.foo
puts "3"
end
def 3.foo
^
(irb):7: syntax error, unexpected keyword_end, expecting end-of-input
В чем причина этого?
Я знаю, что это то, что я никогда не должен делать. Мне просто интересно, почему это не работает так, как я ожидал.
1 ответ
Здесь есть две вещи.
Одна вещь в том, что Fixnum
Не может быть одноэлементных методов. Но мы еще не дошли до этого момента, поскольку в вашем коде есть синтаксическая ошибка, и поэтому Ruby даже не пытается запустить его с самого начала.
Во-вторых, синтаксис Ruby сложен, и поэтому существует много темных угловых случаев. Вы, кажется, нашли тот, где различное использование .
Символ, означающий, что и десятичный разделитель, и селектор метода конфликтуют друг с другом таинственным образом.
Теперь, конечно, это на самом деле не большая проблема, так как, как я упоминал ранее, Fixnum
В любом случае, не может быть синглтон-класса:
object = 3
def object.foo
puts "3"
end
# TypeError: can't define singleton