ale*_*exp 6 haskell iterable-unpacking
刚刚开始使用Haskell,我正在尝试找出基于单个条件分配多个变量的最佳方法.到目前为止,我一直在打包和打开元组.是否有更好/更惯用的方式?
(var1, var2, var3) =
if foo > 0
then ("Foo", "Bar", 3)
else ("Bar", "Baz", 1)
Run Code Online (Sandbox Code Playgroud)
还对包装和打开元组包装的成本感到好奇.如果我正确地阅读这个,似乎这在函数中得到了优化,但不确定是否是赋值的情况.
是的,那很好.如果在启用优化的情况下进行编译,则元组确实会被"取消装箱",因此它们不会产生额外费用.代码将转换为类似这样的东西:
(# var1, var2, var3 #) =
case foo > 0 of
False -> (# "Bar", "Baz", 1 #)
True -> (# "Foo", "Bar", 3 #)
Run Code Online (Sandbox Code Playgroud)
未装箱的3元组实际上只有三个值 - 它没有任何类型的额外结构.因此,它无法存储在数据结构中,但这没关系.当然,如果foo在编译时已知,那么它case也将被优化,你只需要三个定义.