Scala集合中单右箭头(→)的含义及用法咨询
关于Scala中
→运算符的用法解析 嘿,这个问题我之前也踩过坑!那个→运算符其实是Scala标准库藏起来的一个语法糖,因为它是通过隐式转换实现的,所以你在List的官方方法文档里找不到它的直接条目,很容易懵。
本质是什么?
→是scala.Predef里ArrowAssoc类的方法,Scala会自动把任意对象隐式转换成ArrowAssoc实例,这样你就能给任何对象调用→方法了。它的作用特别简单:把调用它的对象和传入的参数组成一个二元组。
换句话说,obj.→(param)完全等价于(obj, param),只是写法更简洁。
你的List示例用法
针对你给出的代码,正确的使用方式是这样的:
val sampleList: List[String] = List("a", "b", "c") // 传入任意类型的参数,和sampleList组成二元组 val listTuple = sampleList.→("这是我的列表") val anotherTuple = sampleList.→(123) // 打印结果看看 println(listTuple) // 输出: (List(a, b, c), 这是我的列表) println(anotherTuple) // 输出: (List(a, b, c), 123)
为什么不能像Spark map那样用函数?
你尝试用s => s报错是因为→根本不是高阶函数——它只接受一个普通参数,用来和调用者组成元组。如果你非要传函数进去,它也会把函数当作元组的第二个元素,比如:
val funcTuple = sampleList.→((s: String) => s.length) println(funcTuple) // 输出: (List(a, b, c), <function1>)
但这显然不是你想要的,它和Spark的map完全是两回事,别搞混啦!
额外小技巧
平时我们更常用的是中缀写法,比如sampleList → "myList",和sampleList.→("myList")效果完全一样,看起来更清爽。
内容的提问来源于stack exchange,提问作者sparkonhdfs
相关产品推荐
相关产品推荐

