вгадай мову по wtf

Jul 16, 2016 11:55



2.2.0 :010 > f 1, 2 { |x| x+1 }
SyntaxError: (irb):10: syntax error, unexpected '{', expecting end-of-input
2.2.0 :011 > f (1, 2) { |x| x+1 }
SyntaxError: (irb):11: syntax error, unexpected ',', expecting ')'
2.2.0 :012 > f(1, 2) { |x| x+1 }
=> 2

what's their problem?!

Leave a comment

Comments 29

ex_juan_gan July 16 2016, 14:44:57 UTC
Японцы... Мац, он обращает внимание на мелкие буковки, а большая картина ему не видна.

Reply


vinslivins July 17 2016, 10:43:06 UTC
это всё потому, что бедному руби нужно угадывать, метод это или переменная (он их намеренно путает.)
irb(main):008:0> def f a,b; end
=> nil
irb(main):009:0> f 1, 2 do |x| x+1 end
=> nil

Reply

sassa_nf July 17 2016, 11:23:24 UTC
нет, жалуется же что это синтаксическая ошибка!

Вопрос на самом деле в том, "(" - это токен или нет. Если токен отдельный от var name, то это первый язык, в котором нельзя между токенами произвольно _вставлять_ пробелы.

Reply

vinslivins July 17 2016, 12:58:14 UTC
я не знаю точной терминологии, но по-моему почти все языки программирования парсятся в бытовом смысле неоднозначно. иногда можно вставлять пробелы, иногда нельзя. в джаваскрипте был пример, когда две отдельных программы компилируются, а если их сделать одна под другой, то нет, несмотря на символ новой строки.

Reply

salas July 24 2016, 22:23:23 UTC
В js, кажется, грабли этого вида ровно одни, и всё-таки не на лексическом уровне: это магическая инструкция "use strict", которая меняет смысл остального кода, когда является первой в файле (или теле функции).

Reply


vinslivins July 18 2016, 09:38:59 UTC
умный жж мои коменты отправляет в спам

Reply

sassa_nf July 18 2016, 09:41:58 UTC
хм... не знаю, в инбоксе не показывает дополнительных комментов, кроме тех, что есть здесьа, нашел, расспамил

Reply


Leave a comment

Up