Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Век живи, век учись и максимусом помрёшь (https://javascript.ru/forum/offtopic/46477-vek-zhivi-vek-uchis-i-maksimusom-pomrjosh.html)

monolithed 11.04.2014 16:52

Цитата:

Сообщение от Sweet
Отчего не любишь "S"?

Спасибо, поправлю!

monolithed 11.04.2014 17:47

Цитата:

Сообщение от Sweet
Вообще, мне кажется более уместной такая регулярка:
/\/\*[!*]([\s\S]+?)\*\//

На этом тесте валится:
test('/***.../', function () {
	var test = function () {
		/***/
		/*!*/
		/**/
		//
	};

	equal(test.__doc__, '');
});

monolithed 11.04.2014 17:54

Цитата:

Сообщение от 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'

Sweet 11.04.2014 18:28

Цитата:

Сообщение от monolithed
На этом тесте валится

Действительно. Тогда я бы сделал так:
/\/\*[!*]([\s\S]*?)\*\//
:)
Она и с флагом g вроде корректно ищет.

monolithed 11.04.2014 18:49

Цитата:

Сообщение от Sweet
Действительно. Тогда я бы сделал так:
/\/\*[!*]([\s\S]*?)\*\//

Ага, так и сделал :)

Octane 14.04.2014 21:14

Цитата:

Сообщение от 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"))) {
    …
}

Но так и не решаюсь использовать в реальном коде из-за предрассудков о кодогенерации :-?

kobezzza 14.04.2014 21:20

Цитата:

Но так и не решаюсь использовать в реальном коде из-за предрассудков о кодогенерации
В данном контексте они (предрассудки) оправданы :)

DjDiablo 15.04.2014 00:01

Цитата:

Но так и не решаюсь использовать в реальном коде из-за предрассудков о кодогенерации
Предпочтительно по моему просто заранее объявить методы, не очень красиво генерировать одну и ту же функцию столько раз сколько она потребуется.

DjDiablo 15.04.2014 00:10

Интересно а оправдан ли чем то вот такой подход (просто в голову стукнуло).
Здесь кодогенерация сведена к минимуму, а расходы памяти такие же как если бы все функции были бы объявлены заранее.

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));

Octane 15.04.2014 00:39

Кстати IE11 сам умеет оптимизировать, цикл с деятком тысяч итераций вызывает F за несколько миллисекунд, если тело не меняется.


Часовой пояс GMT +3, время: 16:52.