我正在尝试理解此scala代码(已从here修改):
val ConnectionDefinition(_, eventConnection) =
Connection.definition[EventRepo, Connection, Event]("Event", EventType)
这是在object
内。看起来它正在使用函数Connection.definition[EventRepo, Connection, Event]("Event", EventType)
的返回值来实例化一个case类,解包返回值(?),但是:
val ConnectionDefinition(_, eventConnection)
?这是某种匿名价值还是某种东西,因为没有标识符(例如val myVal = ...
。eventConnection
)?答案 0 :(得分:5)
正在定义的val是eventConnection
,这是调用unapply
返回的ConnectionDefinition
实例的解构(Connection.definition
)中的第二个参数。现在eventConnection
将可用于其余代码(返回的ConnectionDefinition
实例的其余部分将不会,但可能不是必需的。)
答案 1 :(得分:0)
你看到的是一个解构赋值,第一个值被忽略了。
ConnectionDefinition
是一个包含两个值的案例类。案例类自动实现一个提取器(unapply
方法),它在模式匹配时调用。
您可以使用此语言功能执行以下操作:
case class ConnectionDefinition(edgeType: ObjectType, connectionType: ObjectType)
object Connection {
def definition(): ConnectionDefinition = ???
}
// basic assignment:
val conn = Connection.definition()
val conn: ConnectionDefinition = Connection.definition()
// extract the two values from the case class:
val ConnectionDefinition(edgeType, connType) = Connection.definition()
val ConnectionDefinition(edgeType: ObjectType, connType: ObjectType) = Connection.definition()
// extract only one value and ignore the other:
val ConnectionDefinition(edgeType, _) = Connection.definition()
val ConnectionDefinition(_, connType) = Connection.definition()
// extract both values AND still keep a reference to the whole ConnectionDefinition
val conn @ ConnectionDefinition(edgeType, connType) = Connection.definition()