-1
votes

Type Inference dans la fonction Kotlin Lambda ne fonctionne pas

My Lambda:

error: type mismatch: inferred type is (Int) -> Int but Int was expected
val streetNumber: Int = {
                        ^


1 commentaires

Vous déclarez streetnumber pour avoir type int , mais votre Lambda est de type (int) -> int .


3 Réponses :


1
votes

Votre type de variable int code> n'est pas correct dans ce cas, ce que vous voulez faire à la place:

val streetNumber: (Int) -> Int = {
    num: Int -> num / 4
}


2 commentaires

Vous n'avez pas besoin num: int à l'intérieur de la Lambda, le type est spécifié sur le côté gauche de = . Il suffit de dire {num -> num / 4} . Vous pouvez le faire encore plus court si vous utilisez le nom de paramètre par défaut - it : `:` `` val streetnumber: (int) -> int = {it / 4} `` `


C'est facultatif, oui. Dans ce cas, je viens de corriger le code d'origine et je ne l'ai pas simplifiée



0
votes

déclarant: xxx pré>

signifie que le type de données code> s de StreetNumber code> est int code> et pas strong> que le Type de retour est INT code>.
Ce conflit avec l'affectation: P>

3


5 commentaires

Le type de données ne doit pas être identique au type de retour? Comment définir int comme type de données de streetnumber puis renvoyer une chaîne dans la fonction?


Le type de données ne doit pas être identique au type de retour? Non. Comment définir int comme type de données de StreetNumber ? Tu ne le fais pas. La variable StreetNumber type S est (int) -> int et non int . Pensez-y comme une variable de fonction. Le type de retour est int .


Pour développer sur le dernier commentaire: Streetnumber est mis sur un lambda - un bloc de code anonyme qui prend un paramètre int et renvoie un < code> int (c'est ce que (int) -> int signifie). Le code comme indiqué n'est pas appeler la Lambda, le stocke simplement pour une utilisation future. Si / quand il est appelé, il retournera un int , mais ce n'est pas ce que streetnumber est défini sur.


Pouvez-vous donner un exemple où le type de données et le type de retour sont différents? @ forpas


Consultez ma réponse modifiée et vérifiez le lien pour plus d'informations.



0
votes

Vous pouvez le faire facilement, xxx

puis, appelez-le comme, xxx

C'est le moyen le plus simple, de faire cette chose.


0 commentaires