【发布时间】:2010-02-14 02:07:10
【问题描述】:
我有两个尝试将浮点列表转换为 Vector3 或 Vector2 列表的 sn-ps 代码。这个想法是一次从列表中取出 2/3 个元素并将它们组合为一个向量。最终结果是一个向量序列。
let rec vec3Seq floatList =
seq {
match floatList with
| x::y::z::tail -> yield Vector3(x,y,z)
yield! vec3Seq tail
| [] -> ()
| _ -> failwith "float array not multiple of 3?"
}
let rec vec2Seq floatList =
seq {
match floatList with
| x::y::tail -> yield Vector2(x,y)
yield! vec2Seq tail
| [] -> ()
| _ -> failwith "float array not multiple of 2?"
}
代码看起来非常相似,但似乎无法提取公共部分。有什么想法吗?
【问题讨论】:
-
对我来说看起来很干净,我认为您不会遇到可维护性问题
-
您可以编写可以抓取 N 个项目的通用代码,然后只使用 match 来选择
Vector3或Vector2(根据需要),但为什么呢?开销会比你在这里的更复杂。现在,如果你一直到 12 岁,那就是另一回事了....
标签: f# tail-recursion code-duplication