2017-05-24 1 views
3

Je peux définir une valeur dans Kotlin REPL comme celui-ci (récursive) sans avoir une erreur:Est-ce un bug de Kotlin REPL?

val s: String = s 

Et maintenant j'obtenir un « s » avec le type de NotNull, mais la valeur de null.
Et je peux faire quelque chose avec cette valeur NotNull avec un NPE:

>>> val s: String = s 

>>> s.length 
java.lang.NullPointerException 

Vous pouvez l'essayer sur votre propre Kotlin REPL, il fonctionne à chaque fois. J'utilise Kotlin version 1.1.2-3.

+0

Le REPL travaille en transformant les variables locales dans les membres d'une classe qui représente l'état à la fin de la ligne en cours d'exécution. Ainsi, la variable 's' est créée en tant que membre avec la valeur' null', puis plus tard sa propre valeur (toujours 'null'), ce qui explique pourquoi le code compile. Il ne vérifie pas vraiment le code en contexte, mais vérifie le code par rapport aux lignes précédentes et aux valeurs actuelles définies dans la ligne en cours. Il y a donc d'autres cas qui échoueront. Mais un bogue est un bug, s'il vous plaît recherchez-le et sinon signaler le bug: http://youtrack.jetbrains.com/issues/KT –

+0

Et s'il vous plaît noter le bug ici afin que d'autres lecteurs puissent suivre son état. Merci! –

+0

Je n'ai pas trouvé de problème ouvert, donc j'ai créé celui-ci https://youtrack.jetbrains.com/issue/KT-18052 – zsmb13

Répondre

0

Oui, c'est un bug.

val s: String = s 
print(s.length) 

Ce code compilé avec succès, mais lors de l'exécution, il est une erreur donnant.

Error: Unresolved reference: s


enter image description here

2

Oui, c'est un bug de REPL.

Dans le fichier REAL Kotlin, il se plaindra comme « référence Unresolve »

Désolé, je ne peux pas poster un img, mais vous pouvez essayer à votre IDE.

J'utilise le IntelliJ IDEA-2017.1.3

+0

Bien sûr, ce code est illégal – ice1000