fonctions Arrow ...
Comme je suis sûr que vous savez, javascript
soutient arrow functions qui sont vraiment succinct, mais, malheureusement, ne fonctionne pas avec votre propre regex
.
J'ai rapidement converti votre joli regex
en son propre function
qui prend comme function
une entrée et retourne si elle est vide par souci de simplicité plus tard. Juste pour montrer comment les fonctions de direction peuvent être largement utilisés, je l'ai mis dans un:
isEmpty = f => /^function[^{]+\{\s*\}/m.test(f.toString())
Maintenant, nous pouvons facilement tester une fonction vide:
function eF() {}
qui, comme nous attendre avec isEmpty(eF)
rendements true
.
Et une fois de plus avec une fonction réelle:
function retOne() {return 1;}
qui encore une fois comme prévu avec des rendements isEmpty(retOne)
false
.
Cependant, la question que j'ai rencontré des fonctions de direction afin d'initialiser un vide une fois, nous avons une syntaxe plus courte de l'original:
eF =() => {}
et la version 'stringified'
cela est tout à fait différent de celui avant:
"() => {}"
donc bien sûr dans ce cas, l'appel isEmpty(eF)
retours false
quand nous voulons true
. Je ne suis pas sûr si vous avez besoin de tester si toutes les fonctions (y compris arrow functions
) sont vides, mais si vous le faites, votre regex
devra être modifié ...
Je ne suis pas génial à les écrire moi-même, mais j'ai essayé un couple et une autre chose que vous voudrez peut-être à considérer est la nature clémente du arrow functions
surtout cette partie du documentation:
(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 }
qui montre comment les accolades {...}
ne sont pas toujours nécessaires. Donc, cette fonction:
retOne =() => 1
est valid
et pourrait faire former un nouveau regex
plus difficile. Une solution de contournement que je pensais est de simplement supprimer tous les accolades de f.toString()
en utilisant:
str.replace(/[{}]/g, '')
.
puis de travailler avec un regex test
à partir de là.
Espérons que cela soit utile si vous voulez que arrow functions
puisse également être testé.
question de Nice ... –
Le concept de réflexion JS m'a fait lol, mais comme le problème; vous avez traité avec des espaces et des multilignes, donc c'est aussi bon que ça. – annakata
N'oubliez pas de rechercher les corps de méthode qui sont tous les commentaires (si c'est votre spécification) – Brad