可以将scala splat用于任何不是varargs的东西吗?
发布时间:2020-12-16 09:18:46 所属栏目:安全 来源:网络整理
导读:给出例如: scala def pipes(strings:String*) = strings.toList.mkString("|") 我可以正常地打电话: scala pipes("foo","bar")res1: String = foo|bar 或与spl at: scala val args = List("a","b","c")scala pipes(args:_*)res2: String = a|b|c 但是我可
给出例如:
scala> def pipes(strings:String*) = strings.toList.mkString("|") 我可以正常地打电话: scala> pipes("foo","bar") res1: String = foo|bar 或与spl at: scala> val args = List("a","b","c") scala> pipes(args:_*) res2: String = a|b|c 但是我可以使用一个splat来为任何一个varargs参数提供参数吗?例如,我想做一些像: scala> def pipeItAfterIncrementing(i:Int,s:String) = (i + 1) + "|" + s scala> val args:Tuple2[Int,String] = (1,"two") scala> pipeItAfterIncrementing(args:_*) 这不行,但是有没有办法实现从单个对象提供多个参数的同样效果,无论是元组还是别的?考虑到编译时它们的长度和类型都是已知的,是否有任何理由无法实现元组? 解决方法
您可以使用Function.tupled来完成以下操作:将一个将n个参数转换为需要单个元组参数为arity n的函数的函数.可以预期的是,Function.untupled做相反的工作.
特殊类型归属:_ *仅适用于重复参数(a.k.a. varargs). scala> def pipeItAfterIncrementing(i:Int,s:String) = (i + 1) + "|" + s pipeItAfterIncrementing: (i: Int,s: String)java.lang.String scala> def tupledPipeItAfterIncrementing = Function.tupled(pipeItAfterIncrementing _) tupledPipeItAfterIncrementing: ((Int,String)) => java.lang.String scala> val args:Tuple2[Int,"two") args: (Int,String) = (1,two) scala> tupledPipeItAfterIncrementing(args) res0: java.lang.String = 2|two (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |