在Scala中_ ::是什么意思?
发布时间:2020-12-16 08:50:47 所属栏目:安全 来源:网络整理
导读:我正在阅读一本关于电梯的书,我遇到了一些我不太了解的东西:_ :: object permanent_link extends MappedString(this,150){ override def validations = valMinLen(3,"Link URL must be at least 5 characters") _ :: super.validations} 我找不到任何提示,
我正在阅读一本关于电梯的书,我遇到了一些我不太了解的东西:_ ::
object permanent_link extends MappedString(this,150){ override def validations = valMinLen(3,"Link URL must be at least 5 characters") _ :: super.validations } 我找不到任何提示,如果有人能帮助我,我将不胜感激. 解决方法
我不知道Lift,但这是一个普遍的问题.首先,::是Scala cons运算符:
scala> 1 :: 2 :: List(3,4) res0: List[Int] = List(1,2,3,4) 这意味着super.validations是某种序列和valMinLen(3,“链接URL必须至少为5个字符”)_是该列表中的单个值. 从上下文看,很明显,在重写的验证方法中,它们调用超级版本并在开头添加一些额外的验证. 这个额外的验证是通过调用valMinLen()创建的.但是,这个额外的调用不会返回与验证列表类型匹配的元素 – 而是一个函数.我们明确地说(通过添加_后缀`)我们想要预先添加一个函数本身,而不是前面的函数值,而不是该函数的返回值. 代码片段胜过千言万语: scala> def f = 3 f: Int scala> def g = 4 g: Int scala> val listOfInts = List(f,g) listOfInts: List[Int] = List(3,4) scala> val listOfFunctions = List(f _,g _) listOfFunctions: List[() => Int] = List(<function0>,<function0>) 比较listOfInts和listOfFunctions的类型.我相信f _语法在Scala世界中被称为部分应用函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |