J'ai passé beaucoup de temps à déboguer un script récemment, et quand j'ai finalement trouvé le problème, c'était à cause du code qui ressemblait à ceci:
class Foo {
has $.bar;
method () {
# do stuff
$!.bar;
}
}
Il s'est avéré que le problème était avec cela $!.bar
, qui aurait dû être soit $!bar
ou $.bar
. J'ai compris.
Mais pourquoi cela ne meurt-il pas ?
En regardant plus en détail, il semble que la question ici est que je suis en train d'appeler une méthode (inexistante) bar
sur $!
, qui à ce stade est Nil
parce qu'il n'y a pas eu d'erreurs.
Et il semble que je puisse réellement appeler n'importe quelle méthode que je veux Nil
et ils reviennent tous en silence Nil
, y compris des trucs comme Nil.this-is-a-fake-method
et Nil.reverse-entropy(123)
.
Est-ce une fonctionnalité? Si oui, quelle est la justification?