【发布时间】:2016-06-29 19:33:45
【问题描述】:
假设我有一个函数fn,它接受以下形式的元组:
fn(
"a" -> (
"b" -> "k",
"c" -> 293,
"d" ->(
"e" -> Seq("i", "j"),
"f" -> Seq(1, 2)
)
),
"g" -> (
"h" -> true
)
)
我不知道如何实现fn 以便能够循环遍历每个叶子(分别是“b”、“c”、“e”、“f”,最后是“h”)知道每次叶自己的父母。
Shapeless 似乎是一个解决方案,即使我不知道如何实现它。
注意:首选香草 scala 方法(如果可能的话)。
注意:我知道我有一个Tuple2(String, T),其中 T 可以是另一个 Tuple(String, T)、字符串、数字、布尔值或 Seq[V]。
注意: Seq[V] 其中 V 可以是字符串、数字或布尔值。
【问题讨论】:
-
叶子知道它的父母是什么意思?
-
另外,这是在没有 Shapeless 的情况下完全可以完成的事情的类别(你不需要宏驱动的通用机器等),但它会更多,更多详细。
-
如果类型在编译时已知,您可以使用宏来匹配类型并生成叶子序列。如果不是,您可以使用模式匹配。
-
这意味着当我遍历叶子时(假设我在“e”上),我知道“b”有“d”和“a”作为父级,这就是我的意思通过“叶子知道它的父母”
标签: scala types functional-programming purely-functional