Scala 从for comp中让步并没有返回我想要的类型

Scala 从for comp中让步并没有返回我想要的类型,scala,Scala,为什么返回值是val maybeString的Try[Serializable]?我希望它是一个选项[字符串] import scala.util.Try val a1 = Try("fase".toBoolean) val b2 = Try("100".toInt) val maybeString: Option[String] = for { a <- a1 b <- b2 } yield (a,b) match { case (true, 50) => "

为什么返回值是val maybeString的Try[Serializable]?我希望它是一个选项[字符串]

import scala.util.Try

val a1 = Try("fase".toBoolean)
val b2 = Try("100".toInt)

val maybeString: Option[String] = for {
  a <- a1
  b <- b2
} yield (a,b) match {
  case (true, 50) => "foo"
  case (false, 100) => "bar"
  case _ => None
}

println(s"string is $maybeString")
导入scala.util.Try
val a1=尝试(“fase”.toBoolean)
val b2=尝试(“100”.toInt)
val maybeString:选项[String]=for{
“酒吧”
案例=>无
}
println(s“字符串为$maybeString”)
为什么返回值是val maybeString的Try[Serializable]

因为scala编译器无法确定在以下表达式中返回的元素的类型:

(a,b) match {
  case (true, 50) => "foo"
  case (false, 100) => "bar"
  case _ => None
}
在两种情况下返回
字符串
,在另一种情况下返回
选项
(即
),因此它选择层次结构中最常见的类型:
可序列化

我希望它是一个选项[字符串]

import scala.util.Try

val a1 = Try("fase".toBoolean)
val b2 = Try("100".toInt)

val maybeString: Option[String] = for {
  a <- a1
  b <- b2
} yield (a,b) match {
  case (true, 50) => "foo"
  case (false, 100) => "bar"
  case _ => None
}

println(s"string is $maybeString")
对象测试扩展应用程序{
导入scala.util.Try
val a1=尝试(“假”。toBoolean)
val b2=尝试(“100”.toInt)
val maybeString:选项[String]=for{
“酒吧”
}
println(s“字符串为$maybeString”)
}
为什么返回值是val maybeString的Try[Serializable]

因为scala编译器无法确定在以下表达式中返回的元素的类型:

(a,b) match {
  case (true, 50) => "foo"
  case (false, 100) => "bar"
  case _ => None
}
在两种情况下返回
字符串
,在另一种情况下返回
选项
(即
),因此它选择层次结构中最常见的类型:
可序列化

我希望它是一个选项[字符串]

import scala.util.Try

val a1 = Try("fase".toBoolean)
val b2 = Try("100".toInt)

val maybeString: Option[String] = for {
  a <- a1
  b <- b2
} yield (a,b) match {
  case (true, 50) => "foo"
  case (false, 100) => "bar"
  case _ => None
}

println(s"string is $maybeString")
对象测试扩展应用程序{
导入scala.util.Try
val a1=尝试(“假”。toBoolean)
val b2=尝试(“100”.toInt)
val maybeString:选项[String]=for{
“酒吧”
}
println(s“字符串为$maybeString”)
}

您可能不需要转换到
选项
,直到最后一刻:

val maybeString: Option[String] = 
  ( for {
    a <- a1
    b <- b2
    s <- Try(
        (a, b) match {
          case (true, 50) => "foo"
          case (false, 100) => "bar"
        }
      )
  } yield (s)).toOption
val-maybeString:Option[String]=
(用于{

a您可能不需要转换到
选项
,直到最后一刻:

val maybeString: Option[String] = 
  ( for {
    a <- a1
    b <- b2
    s <- Try(
        (a, b) match {
          case (true, 50) => "foo"
          case (false, 100) => "bar"
        }
      )
  } yield (s)).toOption
val-maybeString:Option[String]=
(用于{

a这是javascript吗?@MarkYisri这是一个笑话吗?不,我只是想知道!!我一定不知道那是什么语言,这是javascript吗?@MarkYisri这是一个笑话吗?不,我只是想知道!!我一定不知道那是什么语言,然后我很困惑,只有两种可能:字符串和无。所以对我来说,这显然应该是选项[String]:)为什么编译器不能解决这个问题?哦,我明白了,因为Try是静态类型的语言:)
String
Option
是完全不同的。您要做的是将
String
type隐式转换为
Option[String]
。它不是由编译器自动执行的。我很困惑,只有两种可能:String和None。所以我觉得很明显,应该是Option[String]:)为什么编译器不能解决这个问题?哦,我明白了,因为Try是静态类型的语言:)
String
Option
是完全不同的。您要做的是将
String
类型隐式转换为
Option[String]
。编译器不会自动执行。