[英]Shortening function definitions using multine patterns in haskell
这样做更好吗?
charToAction 'q' = Just $ WalkRight False
charToAction 'd' = Just $ WalkRight True
charToAction 'z' = Just Jump
charToAction _ = Nothing
要么
charToAction x = case x of
'q' -> Just $ WalkRight False
'd' -> Just $ WalkRight True
'z' -> Just Jump
_ -> Nothing
?
绝对没有功能上的差异。 这是个人喜好问题。
没有性能差异, 因为第一个定义不如第二个定义。 您正确地选择了案例+模式匹配解决方案,而不是带有警卫和相等性测试的解决方案,这里有一些出色的一般说明: http : //existentialtype.wordpress.com/2011/03/15/boolean-blindness/ (他的示例在ML中,但立即翻译为Haskell)。
请注意,您在第二个定义中误用了otherwise
; 你应该只写_ -> Nothing
这不是otherwise
所使用守卫,你可能也已经写fmap -> Nothing
和同样会发生。
正如其他人提到的那样,生成的代码没有什么区别,因为前一种方法与后一种方法有所不同,但是我可以指出一些其他考虑因素,这些因素可以帮助您选择一种或另一种使用:
let
或where
块在函数中定义模式匹配函数。 但是,在任何情况下都无法将一个翻译成另一个。 这完全是编码风格的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.