F#, Pipe forward a match case without using temp variable
与上面的问题类似,有没有办法将变量管道转发到匹配大小写而不使用临时变量或lambda?
这个想法:
let temp =
x
|> Function1
|> Function2
// ........ Many functions later.
|> FunctionN
in
result =
case temp of
Case1 -> "Output 1"
Case2 -> "Output 2"
_ -> "Other Output"
我希望实现以下目标:
result =
x
|> Function1
|> Function2
// ........ Many functions later.
|> FunctionN
|> case of // Syntax Error! Should use "case temp of"
Case1 -> "Output 1"
Case2 -> "Output 2"
_ -> "Other Output"
我可以使用lambda函数,但我仍然会“命名”临时变量。
result =
x
|> Function1
|> Function2
// ........ Many functions later.
|> FunctionN
|> \temp -> case temp of
Case1 -> "Output 1"
Case2 -> "Output 2"
_ -> "Other Output"
在Elm语法中有没有办法“摆脱”临时变量?感谢。
答案 0 :(得分:9)
不,榆树没有这种能力。
像Haskell这样的其他语言通过LambdaCase
扩展允许类似的东西,但是榆树倾向于避免有太多的方法来说同样的事情,在保持语法简单方面犯了错误。
issue has been raised before和榆树的作者拒绝了该提案,并附有以下评论:
更普遍的是,现在的重点不是增加榆树的语法。 (我们实际上更经常丢弃东西。)如果某些东西已经在Elm中表达,我对提供表达它的其他方法并不十分感兴趣。在这种情况下,我认为我们会添加语法,使事情变得不那么规律,更难阅读。