Yan*_*kee 0 scala tuples traversal
假设我创建了一个Tuple6
:
val tup = (true, 1 , "Hello" , 0.4 , "World" , 0 )
tup: (Boolean, Int, String, Float, String, Int)
Run Code Online (Sandbox Code Playgroud)
而且我可以访问使用数组的元素._<position>
像
tup._1
和tup._2
等.但为什么呢
for (i <- 1 to 6)
println(tup._i)
Run Code Online (Sandbox Code Playgroud)
给我一个错误的说法
value _i is not a member of (String, Int, Boolean, String, Double, Int)
Run Code Online (Sandbox Code Playgroud)
我明白,有明确说明元组不可迭代,但如果._1
有效,不应该._i
以相同的方式工作吗?
这一切归结为类型.
你喜欢什么类型的动态访问器_<position>
?在一般情况下,唯一有效的是Any
.在诸如Scala之类的强类型语言中,这对于大多数目的来说是无用的.
好消息是,这个问题可以在一个类型安全的方式进行处理-例如见的HList
风格的元组处理在无形.
但是,标准的Scala库中没有这样的机制(除了重大的元编程,如宏).