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.
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 –
Et s'il vous plaît noter le bug ici afin que d'autres lecteurs puissent suivre son état. Merci! –
Je n'ai pas trouvé de problème ouvert, donc j'ai créé celui-ci https://youtrack.jetbrains.com/issue/KT-18052 – zsmb13