Функции стрелок ...
Как я уверен, вы знаете, javascript
поддерживает функции стрелок , которые действительно лаконичны, но, к сожалению, не работают с вашими аккуратными regex
.
Я быстро преобразовал ваш хороший regex
в его собственный function
, который принимает function
в качестве ввода и возвращает значение, является ли он пустым для простоты позже. Просто чтобы продемонстрировать, как широко используются функции стрелок, я поместил их в один:
isEmpty = f => /^function[^{]+\{\s*\}/m.test(f.toString())
Теперь мы можем легко протестировать пустую функцию:
function eF() {}
, который, как и следовало ожидать с isEmpty(eF)
, возвращает true
.
И еще раз с фактической функцией:
function retOne() {return 1;}
, который, как и ожидалось, с isEmpty(retOne)
возвращает false
.
Однако проблема, с которой я столкнулся, заключалась в функциях со стрелками, поэтому для повторной инициализации пустой мы имеем более короткий синтаксис оригинала:
eF = () => {}
и версия 'stringified'
, которая сильно отличается от предыдущей:
"() => {}"
поэтому, конечно, в этом случае вызов isEmpty(eF)
возвращает false
, когда мы хотим true
. Я не уверен, нужно ли вам проверять, все ли функции (например, arrow functions
) пусты, но если вы это сделаете, ваш regex
потребуется изменить ...
Я сам не очень хорошо их пишу, но попытался пару и еще одну вещь, которую вы могли бы рассмотреть, - это снисходительный характер arrow functions
, особенно этой части документации :
(param1, param2, …, paramN) => { statements }
(param1, param2, …, paramN) => expression
// equivalent to: (param1, param2, …, paramN) => { return expression; }
// Parentheses are optional when there's only one parameter name:
(singleParam) => { statements }
singleParam => { statements }
, который показывает, что фигурные скобки {...}
не всегда необходимы. Итак, эта функция:
retOne = () => 1
равно valid
и может затруднить формирование нового regex
. Один из обходных путей, о котором я подумал, - это просто удалить все фигурные скобки из f.toString()
, используя:
str.replace(/[{}]/g, '')
.
, а затем работать с regex test
оттуда.
Надеюсь, это что-то полезное для рассмотрения, если вы хотите, чтобы arrow functions
также можно было тестировать.