Scala 从for comp中让步并没有返回我想要的类型
为什么返回值是val maybeString的Try[Serializable]?我希望它是一个选项[字符串]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) => "
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]
。编译器不会自动执行。