我一直在阅读Real World Haskell,我已经快要读完了,但是关于(.)
和($)
操作符的风格问题一直困扰着我。
当你编写一个由其他函数组合而成的函数时,你可以这样写:
f = g . h
但是当你在这些函数的末尾应用一些东西时,我会写成这样:
k = a $ b $ c $ value
但这本书是这样写的:
k = a . b . c $ value
现在,在我看来,它们在功能上是等同的,在我看来,它们做的事情是完全一样的。然而,我看得越多,我就越发现人们以书中的方式编写函数:首先使用(.)
组合,然后只在最后使用($)
附加一个值来计算批量(没有人使用很多美元组合)。
使用书籍的方式比使用所有($)
符号要好得多,有什么原因吗?或者,这里有没有我没有得到的最佳实践?或者它是多余的,我根本不应该担心它?
发布于 2010-06-13 09:49:05
我想我可以从权威人士那里回答这个问题。
使用图书的方式比使用所有($)符号要好得多,这是有原因的吗?
没有什么特别的原因。布莱恩和我都更喜欢减少线路噪音。.
比$
更安静。因此,本书使用了f . g . h $ x
语法。
发布于 2010-06-13 10:08:07
它们实际上是等价的:请记住,$
操作符本质上什么也不做。f $ x
的计算结果为f x
。$
的目的是它的固定行为:右关联和最小优先级。删除$
并使用括号进行分组,而不是使用中缀优先级,代码片段如下所示:
k = a (b (c (value)))
和
k = (a . b . c) value
与$
版本相比,更喜欢.
版本的原因与更喜欢两者而不是上面带括号的版本的原因是相同的:美学吸引力。
尽管,有些人可能会想,使用中缀运算符而不是括号是否基于某种潜意识的冲动,以避免与Lisp可能的任何相似之处(只是开玩笑...我想?)。
发布于 2010-06-22 23:06:57
我要补充的是,在f . g $ x
中,f . g
是一个有意义的语法单元。
同时,在f $ g $ x
中,f $ g
不是一个有意义的单元。可以说,$
链更有必要--首先获得x
的g
的结果,然后对其执行f
,然后对其执行foo
,然后依此类推。
同时,.
链可以说更具声明性,在某种意义上更接近以数据流为中心的视图--组成一系列函数,并最终将它们应用于某些东西。
https://stackoverflow.com/questions/3030675
复制相似问题