Scala 如何评估这些案例语句类型?

Scala 如何评估这些案例语句类型?,scala,Scala,从以下代码开始: new DefaultHookupClient(HookupClientConfig(new URI("ws://localhost:8080/thesocket"))) { def receive = { case Disconnected(_) ⇒ println("The websocket to " + uri.toASCIIString + " disconnected.") case TextMessage(message) ⇒

从以下代码开始:

  new DefaultHookupClient(HookupClientConfig(new URI("ws://localhost:8080/thesocket"))) {

    def receive = {
      case Disconnected(_) ⇒ println("The websocket to " + uri.toASCIIString + " disconnected.")
      case TextMessage(message) ⇒ {
        println("RECV: " + message)
        send("ECHO: " + message)
      }
    }

    connect() onSuccess {
      case Success ⇒
        println("The websocket is connected.")
      case _ ⇒
    }
  }

receive
是一个回调函数,当接收到连接更新时会触发该函数,但是由于没有匹配语句,如何确定每个case语句类型,case语句与什么匹配?

它们与函数参数匹配。这是一个可用于匿名函数的快捷方式:

 { 
     case foo => bar
     case bat => baz
 }

{ x => x match {
    case foo => bar
    case bat => baz
}}

它们与函数参数匹配。这是一个可用于匿名函数的快捷方式:

 { 
     case foo => bar
     case bat => baz
 }

{ x => x match {
    case foo => bar
    case bat => baz
}}

这是Scala用于定义部分函数的语法糖,并不是特定于
match
(这是Scala自己的语言构造,不是正式的方法)。这就是为什么您可以编写以下内容,例如:

scala> Option(1).map { case x if x == 1 => "foo"; case _ => "bar" }
res0: Option[String] = Some(foo)
map
在这里为一些
B
需要一个
函数[Int,B]
,而
部分函数[Int,String]
函数[Int,String]
的一个子类型,因此我们可以使用部分函数语法糖来提供参数

请注意,分部函数的输入和输出类型必须是已知的,也就是说,它们不能只是被推断出来(Scala的普通匿名函数语法也有类似的限制):

scala>val f={case x if x==1=>“foo”;case_=>“bar”}
:11:错误:缺少扩展函数的参数类型
匿名函数的参数类型必须完全已知。(补充说明8.5)
所需类型为:?
val f={case x if x==1=>“foo”;case_=>“bar”}
^

在您正在查看的示例中,
DefaultHookupClient
继承了返回类型为
receive
receive
方法,该方法是
PartialFunction[InboundMessage,Unit]
的类型别名,因此,您不会遇到这种限制,因为类型是已知的。

这是Scala用于定义部分函数的语法糖,而不是特定于
匹配(这是它自己的语言构造,不是正式的方法)。这就是为什么您可以编写以下内容,例如:

scala> Option(1).map { case x if x == 1 => "foo"; case _ => "bar" }
res0: Option[String] = Some(foo)
map
在这里为一些
B
需要一个
函数[Int,B]
,而
部分函数[Int,String]
函数[Int,String]
的一个子类型,因此我们可以使用部分函数语法糖来提供参数

请注意,分部函数的输入和输出类型必须是已知的,也就是说,它们不能只是被推断出来(Scala的普通匿名函数语法也有类似的限制):

scala>val f={case x if x==1=>“foo”;case_=>“bar”}
:11:错误:缺少扩展函数的参数类型
匿名函数的参数类型必须完全已知。(补充说明8.5)
所需类型为:?
val f={case x if x==1=>“foo”;case_=>“bar”}
^

在您正在查看的案例中,
DefaultHookupClient
继承了一个返回类型为
receive
receive
方法,该方法是
PartialFunction[InboundMessage,Unit]
的类型别名,因此您不会遇到此限制,因为该类型是已知的。

模式匹配正在receive type上进行吗map需要一个函数[Int,B]'(f:(a)⇒ B) (取自)是函数[Int,B]的语法糖?@蓝天是的,
A=>B
是函数[A,B]
的语法糖,匹配的类型是
InboundMessage
,因为
Receive
部分函数[InboundMessage,Unit]的别名
“DefaultHookupClient继承了返回类型为receive的receive方法,它是PartialFunction[InboundMessage,Unit]的类型别名'很抱歉,但这对我来说没有意义,因为您说的'Receive'是其返回类型的模式匹配,但在计算方法之前,返回类型是未知的,或者继承的'Receive'方法是否已经包含返回类型?PartialFunction[InboundMessage,Unit]是否隐式传递给“Receive”方法?@blue sky这只是语法:
{case which=>stuff}
不能在任意上下文中使用预期的类型必须已知。这里之所以知道这一点,是因为我们正在实现超类型的
receive
。在这种情况下,receive方法是否被覆盖?模式匹配发生在receive类型上map需要一个函数[Int,B]'(f:(a)⇒ B) (取自)是函数[Int,B]的语法糖?@蓝天是的,
A=>B
是函数[A,B]的语法糖,匹配的类型是
InboundMessage
,因为
Receive
部分函数[InboundMessage,Unit]的别名
“DefaultHookupClient继承了返回类型为receive的receive方法,它是PartialFunction[InboundMessage,Unit]的类型别名'很抱歉,但这对我来说没有意义,因为您说的'Receive'是其返回类型的模式匹配,但在计算方法之前,返回类型是未知的,或者继承的'Receive'方法是否已经包含返回类型?PartialFunction[InboundMessage,Unit]是否隐式传递给“Receive”方法?@blue sky这只是语法:
{case which=>stuff}
不能在任意上下文中使用预期的类型必须已知。这里之所以知道它,是因为我们正在实现超类型的
receive
。在这种情况下是否覆盖receive方法?