小编Lle*_*lis的帖子

为什么匹配关键字而不是Scala中的函数?

我不明白为什么Scala已经match定义为关键字而不是函数.它可以通过含义(如ArrowAssoc)来定义.例如,请考虑以下内容.

  implicit class Matchy[A](a: A) {

    def matchy[T](pf: PartialFunction[A, T]): T = pf(a)
  }

  val myVar = 10
  val myString = myVar matchy {
    case 5 => "five"
    case 10 => "ten"
    case x => x.toString
  }

  println(myString) // Prints "ten".
Run Code Online (Sandbox Code Playgroud)

这将释放匹配作为变量名称,并暗示case可以在匹配块之外使用的事实.

那么为什么Scala定义match为关键字?

scala pattern-matching

5
推荐指数
1
解决办法
170
查看次数

在 Scala 中使用稳定标识符的后果是什么?

在 Scala 中,我听说如果标识符以大写字母开头或被反引号包围,则它是“稳定的”。标识符在 Scala 中保持稳定意味着什么?这有什么副作用?最后,这是否与static final建议常量(如在 Java 中)以大写字母开头的约定有关?

scala identifier

2
推荐指数
1
解决办法
551
查看次数

如何使用 java.net.ServerSocket 持续监听端口

我有一个java.net.ServerSocket用于侦听连接。我正在使用它的accept()方法来从客户端获取连接,然后适当地处理它们。我希望不断倾听客户的声音,永远不要让他们无法使用。目前我有类似的代码:

ServerSocket serverSocket = ...
while (shouldBeListening) {
    handleClient(serverSocket.accept());
}
Run Code Online (Sandbox Code Playgroud)

handleClient方法可能需要少量时间(小于十分之一毫秒)。我担心在ServerSocket.accept()方法返回和再次调用之间可能会错过连接请求。解决此问题的最佳方法是什么?

编辑:我实现它的方式目前在handleClient方法中创建了一个新线程,但即使这样也需要时间(特别是因为这是在Raspberry Pi上运行的),我担心如果handleClient在执行方法时请求连接那么它可能会被拒绝,因为accept()没有被运行。

java network-programming serversocket

2
推荐指数
1
解决办法
3912
查看次数