我在Scala中遇到了一些代码,例如:
def props(factory: (TransactionId,
String,
ImageName,
Boolean,
ByteSize,
Int,
Option[ExecutableWhiskAction]) => Future[Container])
factory
具有多个数据类型的参数意味着什么?Scala的此属性的名称或定义是什么,它如何工作?
def props(factory: (TransactionId,
String,
ImageName,
Boolean,
ByteSize,
Int,
Option[ExecutableWhiskAction]) => Future[Container])
让我们从外而内解开这个定义。
def props(x: A)
定义一个函数或方法(取决于特定的上下文),该函数或方法props
采用x
type作为参数A
。在这种情况下,由于未定义任何结果类型(我们没有def props(x: A): B
),因此编译器会推断出结果类型。
然后我们可以扩展:
x
到factory
。该参数绑定到factory
。A
至 (TransactionId, String, ImageName, Boolean, ByteSize, Int, Option[ExecutableWhiskAction]) => Future[Container]
factory
与其他任何值一样。在这种情况下,(TransactionId, String, ImageName, Boolean, ByteSize, Int, Option[ExecutableWhiskAction]) => Future[Container]
这只是另一种说法(此翻译由编译器执行):
Function7[TransactionId, String, ImageName, Boolean, ByteSize, Int, Option[ExecutableWhiskAction], Future[Container]]
任何属于此类型实例的对象都可以传递给props
。这种类型只有一种感兴趣的方法:
def apply(x1: TransactionId,
x2: String,
x3: ImageName,
x4: Boolean,
x5: ByteSize,
x6: Int,
x7: Option[ExecutableWhiskAction]): Future[Container]
该类型表示的是给定类型的7个参数的函数(为了简洁起见,我不再命名它们),结果为Future[Container]
。
简而言之,我们有一个以函数作为参数的函数/方法(出于我们的目的,这里没有区别,给出的代码没有说我们是在处理函数还是方法)。这使它成为高阶函数:在像Scala这样的语言中,函数是“一等”值,例如an Int
,对高阶函数的使用几乎是无限的。
在这种情况下,这基本上意味着props
功能/方法(或它委托的其他功能/方法)具有某种获取a TransactionId
,a String
,an ImageName
,a Boolean
,a ByteSize
,anInt
和an的方法,Option[ExecutableWhiskAction]
而您(props
可以是can的调用者)提供一种Future[Container]
从这些值中选择的方法,props
并将(如果它决定:就像任何函数一样,props
可以决定(例如某个地方是否有错误)不使用您传递的参数),如果需要一个Future[Container]
。
如何创建一个Function7
?
val x: Function7[...] = new Function7 {
def apply(...): ... = ???
}
要么
object MyFactory extends Function7[...] {
def apply(...): ... = ???
}
{ (x1: TransactionId, x2: String, x3: ImageName, x4: Boolean, x5: ByteSize, x6: Int, x7: Option[ExecutableWhiskAction]) =>
// some code that results in a `Future[Container]`
}
foo
对象,该对象的方法带有bar
适当的参数并具有适当的结果foo.bar _
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句