27 Jul
2015
Меня угнетает, что в Руби, как в Цэ сначала идёт функция, а потом - её использование. Там прототипы не объявляются?
Дата рождения: 01.11.1983
Тотальная неудачница и убийца жёстких дисков. Самая большая поклонница Ариэль. Член ордена Вселенского тормоза имени Осаки-сан. Любительница каваййных переднеприводных машинок. Суккуб на полставки. Когти прилагаются.
Меня угнетает, что в Руби, как в Цэ сначала идёт функция, а потом - её использование. Там прототипы не объявляются?
Например:
Не работает. Но если def ... перенести в начало, то всё работает.
Это ж динамический язык. Методы могут меняться находу, поэтому такое, как ты хочешь, не получится. Сделай лучше класс и не страдай.
VBScript, вроде как, тоже вполне динамический.
Он может на лету переопределять классы и методы?
Окей ^^'
Кстати, что это за циферки? Артс обновила раскрашиватель?
«Обновила» ^^'
хмь. ну я в пейтоне обычно так делаю
вот кстати за что недолюбливаю ребе, так это за poetry mode.
Что за моде?
Не знала ^^'
Хотелось так:
не, так низя, потому что всем лень усложнить интерпретатор в этом месте - это значит, придётся второй проход делать по AST, чтоб такие ссылки развернуть.
Да и в среднем это не мешает - всегда можно вытащить лишнее в отдельный модуль.
А с этим ты что делать будешь?
А если require, а не инлайн? Выстрел по ногам обеспечен :)
это ты мне или Линде?
Обоим :)
не, на самом деле тут всё можно реализовать однозначно - таблица объектов заполняется при первом проходе, потом делается проход выполнения. т.е. у тебя должен всегда выполниться только последний main. каждый модуль инициализируется условно независимо, т.е. при require сначала произойдёт два прохода в модуле, а потом уже продолжится 1й проход по основному модулю.
т.е. я вполне могу представить себе, как это будет выполняться.
«Последний» не факт, что финальный. Метапрограммирование, оно такое… Да хоть первый, дело не в невозможности, а в стрельбе по ногам скорее :)
ну тут стрельба по ногам скорее не от возможности вызова до объявления, а от самой возможности переобъявления символа.
Это ты так тонко решил зарезать метапрограмминг? :)
почему это решил зарезать? метапрограмминг слегка про другое.
у тебя метапрограммирование - это или макросы, которые отрабатывают отдельным проходом ДО фазы выполнения кода и оперируют или строками (сишный препроцессор) или AST (макросы лиспа). При этом обычно не происходит переопределения символов. У тебя, как правило, явно объявлено, что некоторый символ - макрос, и должен быть обработан до выполнения.
или нечто, работающее в рантайме через рефлекшн и манипуляции с объектами (или нет) модулей/классов/функций и к переопределению символов на этапе компиляции отношения никакого не имеющее. Вот второй вид я сильно недолюбливаю, т.к. его очень трудно отдебажить и научить выдавать правильную диагностику ошибок.
Т.е. зарезать. Не, пиши на лиспе, не надо ломать нам Ruby :)
я нынче на питоне пишу. там тоже всё метапрограммирование только через посте^Wрантайм. очень такое дебажить бесит.
Обычно такие штуки делают только когда надо. Это свои программеры или чужие постарались, если не секрет?
кто исходники SQLAlchemy читал, тот в цирке не смеётся.
(^ ^)'
этот ваш ActiveRecord не лучше.
Ай донт ноу. Я привыкла, то при таких фокусах интерпретатор VBScript вылезает из экрана и бьёт по голове.
В данном случае это не фокусы, а фича. Которой тоже можно в ноги пострелять, если захотеть. Рельсоводы этим отличись в молодости :}
Как всё непросто!
Наоборот — легко. Потому и постреляли (^__^)'
^^'
Ясно ^^