做什么 - >而且!斯卡拉意味着什么

时间:2017-06-12 14:09:15

标签: scala

我正在阅读一些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"就像在大多数语言中一样

4 个答案:

答案 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)来完成的。 ArrowAssocPredef的一部分,它插入到每个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.