6

理解できない型に問題があります。以下のコードには 2 つのメソッドがhalf1あり、これらはの戻り値の型が明示的に指定されていることhalf2を除いてまったく同じです。half1しかし、foldLeft で 2 つのメソッドを使用するhalfと、コンパイラ エラーが発生します。これがコードです。設定する行val cに問題があります。

package org.bodhi.reactive.`try`

import scala.util.{Try, Success, Failure}

object Hello {
   def main(args: Array[String]): Unit = {

    val list = List(1,2,3)

    Try(1024).flatMap(half1)
    Try(1024).flatMap(half2)

    half1(1024).flatMap(half1)
    half2(1024).flatMap(half2)

    val a = list.foldLeft(Try(1024))((accum, n) => accum.flatMap(half1))
    val b = list.foldLeft(half1(1024))((accum, n) => accum.flatMap(half1))
    val c = list.foldLeft(half2(1024))((accum, n) => accum.flatMap(half2)) // Compiler error

  }

  def half1(n: Int): Try[Int] =  
    if (n % 2 == 0) Success(n / 2)
    else Failure(new Exception(s"WRONG $n"))

  def half2(n: Int) =
    if (n % 2 == 0) Success(n / 2)
    else Failure(new Exception(s"WRONG $n"))
}

私が得るエラーは次のとおりです。

[error] /home/chris/projects/reactive/example/src/main/scala/org/bodhi/reactive/try/Hello.scala:18: type mismatch;
[error]  found   : scala.util.Try[Int]
[error]  required: Product with Serializable with scala.util.Try[Int]
[error]     val c = list.foldLeft(half2(1024))((accum, n) => accum.flatMap(half2))

私の質問は次half1のとおりhalf2です。私はscala 2.11.5を使用しています

4

1 に答える 1