我正在阅读一些Scala代码。 ->
在以下背景中的含义是什么?
var queries = { "Select apple from farm" -> None, "Select orange from fram" -> None, "Select blueberry from anotherFarm" -> Some( #randomStuff ) }
它看起来像一个lambda函数列表,但我认为在这种情况下它应该是=>
而不是->
。
另外, 这个单行代码是什么意思?
def onConnection(id) = { application ! turnOnApplication(id) }
具体来说,我对使用!
感到困惑。它似乎不是一个" NOT"就像在大多数语言中一样
答案 0 :(得分:4)
->
符号是在Scala中定义tuple的一种方法。以下都是等价的:
val apples1 = "Select apple from farm" -> None
val apples2 = ("Select apple from farm" -> None)
val apples3 = ("Select apple from farm", None)
至于!
:
def onConnection(id) = { application ! turnOnApplication(id) }
Scala中的 !
可以是negation运算符,但上面代码段中的!
看起来像tell
Akka(Akka是主要角色) Scala库)。此模式用于向actor发送消息。因此,如果application
是对actor的引用,则代码段会将turnOnApplication(id)
的结果发送给application
actor。来自链接文档:
"!"意思是“即发即忘”,例如异步发送消息并立即返回。也称为告诉。
答案 1 :(得分:1)
细箭头->
是Tuple语法。它只是编写元组的另一种方式。即。
val x: (Int, String) = 3 -> "abc"
与写作相同:
val x: (Int, String) = (3, "abc")
箭头语法是通过提供定义方法ArrowAssoc
的隐式类def ->[B](y: B): (A, B)
来完成的。 ArrowAssoc
是Predef
的一部分,它插入到每个Scala源文件中。您可以找到文档here.
括号语法同时是编译器完成的语法糖。
答案 2 :(得分:0)
您可以使用两种语法形成元组
1)使用逗号
val tuple = (1, 2)
2)使用->
(箭头)
val tuple = 1 -> 2
Scala repl
scala> val tuple = (1, 2)
tuple: (Int, Int) = (1,2)
scala> val tuple = 1 -> 2
tuple: (Int, Int) = (1,2)
答案 3 :(得分:0)
Finding-symbols将->
定义为Method provided by implicit conversion
。只需查看标记为implicit
的方法,这些方法接收作为参数的接收方法的类型的对象。例如:
"a" -> 1 // Look for an implicit from String, AnyRef, Any or type parameter
在上述情况下,->
在类ArrowAssoc中通过方法any2ArrowAssoc
定义,该方法采用A
类型的对象,其中A
为同一方法的无界类型参数。
tutorialPoint将!
定义为It is called Logical NOT Operator. Use to reverses the logical state of its operand. If a condition is true then Logical NOT operator will make false.