Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 11.04.2014, 16:52
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Sweet
Отчего не любишь "S"?
Спасибо, поправлю!
Ответить с цитированием
  #12 (permalink)  
Старый 11.04.2014, 17:47
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Sweet
Вообще, мне кажется более уместной такая регулярка:
/\/\*[!*]([\s\S]+?)\*\//
На этом тесте валится:
test('/***.../', function () {
	var test = function () {
		/***/
		/*!*/
		/**/
		//
	};

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

Последний раз редактировалось monolithed, 11.04.2014 в 18:04.
Ответить с цитированием
  #13 (permalink)  
Старый 11.04.2014, 17:54
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 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. Причина: §
Ответить с цитированием
  #14 (permalink)  
Старый 11.04.2014, 18:28
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

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

Она и с флагом g вроде корректно ищет.
Ответить с цитированием
  #15 (permalink)  
Старый 11.04.2014, 18:49
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Sweet
Действительно. Тогда я бы сделал так:
/\/\*[!*]([\s\S]*?)\*\//
Ага, так и сделал
Ответить с цитированием
  #16 (permalink)  
Старый 14.04.2014, 21:14
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 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"))) {
    …
}

Но так и не решаюсь использовать в реальном коде из-за предрассудков о кодогенерации
Ответить с цитированием
  #17 (permalink)  
Старый 14.04.2014, 21:20
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

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

Последний раз редактировалось kobezzza, 14.04.2014 в 21:27.
Ответить с цитированием
  #18 (permalink)  
Старый 15.04.2014, 00:01
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

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

Последний раз редактировалось DjDiablo, 15.04.2014 в 01:42.
Ответить с цитированием
  #19 (permalink)  
Старый 15.04.2014, 00:10
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 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.
Ответить с цитированием
  #20 (permalink)  
Старый 15.04.2014, 00:39
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск