私はscalaを使い慣れていないので、このコードが私にこのエラーを与える理由を混乱させる。エラー:タイプの不一致。見つかった:(Int、Int)=> Int必須:Int
def div(m: Int, n: Int, i: Int): Int = {
(m: Int, n: Int) =>
if ((m - n) <= 0)
return i
else
div((m-n), n, (i+1))
}
ヘルプありがとうございます。
私はscalaを使い慣れていないので、このコードが私にこのエラーを与える理由を混乱させる。エラー:タイプの不一致。見つかった:(Int、Int)=> Int必須:Int
def div(m: Int, n: Int, i: Int): Int = {
(m: Int, n: Int) =>
if ((m - n) <= 0)
return i
else
div((m-n), n, (i+1))
}
ヘルプありがとうございます。
宣言しているように、Int
ではなく関数を返すようです。
は、あなたが何をしようとして、このです:
def div(m: Int, n: Int, i: Int): Int = if ((m - n) <= 0) return i else div((m-n), n, (i+1))
私はそれが私が試みていたものだと思います。冗長であるように見えましたが、私が試していた本はそのフォーマットでそれをしました。助けてくれてありがとう! – Zul
(x: A) => y: B
はタイプA => B
の無名関数を意味し、その中括弧の間にあなたが持っている表現は、関数(Int, Int) => Int
であり、それが返されるものです。
キーワード、括弧、および全体(m:Int、n:Int)=> - 部分という、非常に多くの超巨大なものを使用します。
def div (m: Int, n: Int, count: Int): Int =
if ((m - n) <= 0) count else div (m - n, n, count + 1)
あなたは試合を使用したい場合、あなたはそれをこのように行うことができます:
def div (m: Int, n: Int, count: Int = 1): Int = (m - n) match {
case (diff: Int) if (diff <= 0) => count
case _ => div (m - n, n, count + 1) }
を(数= 1のデフォルト引数に注意してください)。 m、n、iは私の味のためにちょっとした名前の変数です。 count
の下には、nominator, denominator
が適合します。
しかし、implentationは私が期待する
(0 to 2).map (x => div (14+x, 5, 1))
res61: scala.collection.immutable.IndexedSeq[Int] = Vector(3, 3, 4)
を返します(2、3、3) - あなたが反対方向に丸めます。
if ((m - n) < 0) i-1 else ...
コンパレータの変更とi-1(count-1)の返り値を修正します。
ただし、これは0と負の値を含む値の場合はテストセットではありません。
_Offtopic._答えに[format](http://stackoverflow.com/editing-help#syntax-highlighting)コードを忘れないでください。これは、コード例を読みにくい2番目の質問です。 –
申し訳ありませんが、それはフォーマットで意味されていたことを認識していない、私は次回に注意してください。 – Zul
'return'は超過りですね。 –