11.04.2014, 16:52
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Sweet
|
Отчего не любишь "S"?
|
Спасибо, поправлю!
|
|
11.04.2014, 17:47
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Sweet
|
Вообще, мне кажется более уместной такая регулярка:
/\/\*[!*]([\s\S]+?)\*\//
|
На этом тесте валится:
test('/***.../', function () {
var test = function () {
/***/
/*!*/
/**/
//
};
equal(test.__doc__, '');
});
Последний раз редактировалось monolithed, 11.04.2014 в 18:04.
|
|
11.04.2014, 17:54
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от kobezzza
|
чёт я не понял, а зачем этот хак может в принципе понадобится? это же какой то ад
|
Сообщение от Gozar
|
+100500
|
Для работы с Docstring:
Цитата:
|
Docstring is a string literal specified in source code that is used, like a comment, to document a specific segment of code.
|
Собственно, моя имплементация, представлена по ссылке выше.
В Python например, пошли еще дальше, и включили работу с Docstring в REPL.
# *.py
def function ():
''' Empty function '''
...
➜ python
python> help()
help> print
function ()
'Empty function'
Последний раз редактировалось monolithed, 11.04.2014 в 17:57.
Причина: §
|
|
11.04.2014, 18:28
|
Профессор
|
|
Регистрация: 16.03.2010
Сообщений: 1,618
|
|
Сообщение от monolithed
|
На этом тесте валится
|
Действительно. Тогда я бы сделал так:
/\/\*[!*]([\s\S]*?)\*\//
Она и с флагом g вроде корректно ищет.
|
|
11.04.2014, 18:49
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Сообщение от Sweet
|
Действительно. Тогда я бы сделал так:
/\/\*[!*]([\s\S]*?)\*\//
|
Ага, так и сделал
|
|
14.04.2014, 21:14
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Сообщение от Tim
|
лучше кусок интересного кода запостите
|
Когда-то давно, когда только появились записи о arrow-функциях, видел такой пример:
function F(args, body) {
return new Function(args, "return " + body);
}
array.map(F("x", "x * x"));
array.filter(F("x", "x % 2"));
array.sort(F("a, b", "Math.sign(a - b)"));
if (array.every(F("x", "x === true"))) {
…
}
Но так и не решаюсь использовать в реальном коде из-за предрассудков о кодогенерации
|
|
14.04.2014, 21:20
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Цитата:
|
Но так и не решаюсь использовать в реальном коде из-за предрассудков о кодогенерации
|
В данном контексте они (предрассудки) оправданы
Последний раз редактировалось kobezzza, 14.04.2014 в 21:27.
|
|
15.04.2014, 00:01
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Цитата:
|
Но так и не решаюсь использовать в реальном коде из-за предрассудков о кодогенерации
|
Предпочтительно по моему просто заранее объявить методы, не очень красиво генерировать одну и ту же функцию столько раз сколько она потребуется.
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 15.04.2014 в 01:42.
|
|
15.04.2014, 00:10
|
Профессор
|
|
Регистрация: 04.02.2011
Сообщений: 1,815
|
|
Интересно а оправдан ли чем то вот такой подход (просто в голову стукнуло).
Здесь кодогенерация сведена к минимуму, а расходы памяти такие же как если бы все функции были бы объявлены заранее.
function F(args, body) {
F.cache=F.cache||{};
F.cache[args+body]=F.cache[args+body]||new Function(args, "return " + body);
return F.cache[args+body];
}
alert(F("x,y","x+y")(1, 2));
__________________
Лучше калымить в гандурасе чем гандурасить на колыме
Последний раз редактировалось DjDiablo, 15.04.2014 в 00:39.
|
|
15.04.2014, 00:39
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Кстати IE11 сам умеет оптимизировать, цикл с деятком тысяч итераций вызывает F за несколько миллисекунд, если тело не меняется.
|
|
|
|