私は問題に遭遇しました。誰もがどこかでそれに遭遇したはずだが、どこでも解決策を見つけることができなかったように思えます。 REPLからコピーintとintを追加しますか? in Kotlin
:
var a : Int = 1
var c : Int? = 3
a + if (c != null) {c} else {0}
ERROR: None of the following functions can be called with supplied argument (followed by the various implementations of kotlin.int.plus())
それでは、私がやろうとしていることはINTとのIntを一緒に追加しているのですか?結果はIntであることが欲しいです。非常に簡単です。私はもちろん!!
オペレータを認識していますが、変更が安全ではないため、可能な限り、これを使用しないでください。
a + if (c != null) {c!!} else {0}
4
私は、ヌル・安全性を処理し、!!
演算子の使用を避け、次の解決策の認識しています。
a + (c ?: 0)
4
私の質問は以下の通りです:!!
オペレータの使用を必要としない場合は、他のブロックの使用および/またはブロックとの追加を行う方法があります。 Elvisオペレータではなく、if-elseの使用を好む私の理由は、Elvisオペレータのない言語の人々にとっては明快です。だから私は可能な限りa + if (c != null) {c} else {0}
に近づきたいと思っています。
私の問題やモチベーションが不明確な場合、またはKotlinの設計や意図に反する場合は、お知らせください。
†私は、追加された時点でいくつかの変数が安全であると主張することができるかもしれませんが、このアサーションはその周りのコードが変更されてもそこに残るため、安全でない。
うわー、私は実際にこれがREPL固有の問題であるとは思わなかった。ヌルチェックは、関数内で使用されると実際の作業を行います。したがって、 'var d = a + if(c!= null){c} else {0};は関数内で動作します。私は物事をテストし、Kotlinの様々な癖を見つけるためにREPLを使用してきました。私は正しいプログラムでそれを行うべきだと思います。ありがとうございました。 –
^^ REPL固有のバグや問題があるのは、REPLが典型的な制作ワークフローに関与していないからです – voddan