【发布时间】:2020-03-01 13:55:19
【问题描述】:
我是来自 Java 世界的 Scala 新手。 Scala 似乎比 Java 更复杂。此外,我注意到许多 Scala 构造使用模棱两可的方法名称。除了 +、-、* 和 / 很明显它们是什么之外,还有什么理由使用这样的方法:
object ActorRef {
implicit final class ActorRefOps[-T](val ref: ActorRef[T]) extends AnyVal {
/**
* Send a message to the Actor referenced by this ActorRef using *at-most-once*
* messaging semantics.
*/
def !(msg: T): Unit = ref.tell(msg)
}
}
当我看到感叹号发送消息时,我首先想到的是!
另一个例子:
List 有一个名为 `:::' 的方法用于列表连接
这是你如何使用它:
val oneTwo = List(1, 2)
val threeFour = List(3, 4)
val oneTwoThreeFour = oneTwo ::: threeFour
println(oneTwo + " and " + threeFour + " were not mutated.")
println("Thus, " + oneTwoThreeFour + " is a new list.")
尝试在方法名称中使用特殊字符是否有任何技术或架构原因,或者它只是一种“炫耀”?
【问题讨论】:
-
Akka 的灵感来自于 Erlang 中实现的 Actor 模型,其中
!用于在 Actor 之间发送消息。我猜!只是为了遵守 Erlang 建立的约定而被选中。 -
@KrzysztofAtłasik ::: 怎么样,它的灵感来自哪里?除了谁在乎它的灵感来自哪里?可读性不是更重要吗...?
-
运算符通常使代码非常简洁,但过度使用它们确实会降低代码的可读性。请注意,什么是可读的,什么不是是非常主观的。有些人只是认为
!非常适合发送消息,因为它已经用于其他类似的语言。 -
我认为过度使用许多不同的短名称
::、:::、:+、+:、++、++:可能会使代码难以阅读。但话又说回来,我想知道代码是否混合了样式。还要记住,末尾的:表示右关联stackoverflow.com/a/7889189/5986907 -
“除了谁在乎它的灵感来自哪里?”关键是,对于很多 Akka 用户来说,“当我看到感叹号发送消息时首先想到的事情”是真的,没有讽刺意味。
标签: scala