Rob*_*oli 124 haskell coding-style function-composition
我一直在阅读真实世界的哈斯克尔,我即将结束,但风格问题一直在与我(.)和($)操作员徘徊.
当你编写一个由其他函数组成的函数时,你可以这样写:
f = g . h
Run Code Online (Sandbox Code Playgroud)
但是当你在这些函数的末尾应用某些东西时,我会这样写:
k = a $ b $ c $ value
Run Code Online (Sandbox Code Playgroud)
但是这本书会像这样写:
k = a . b . c $ value
Run Code Online (Sandbox Code Playgroud)
现在,对我来说,他们看起来功能相同,他们在我眼中完全一样.然而,我看的越多,我就越看到人们以书的方式编写他们的函数:(.)首先构成,然后仅在最后使用($)附加值来评估该批次(没有人用很多美元组成) .
是否有理由使用比使用所有($)符号更好的书籍方式?或者这里有一些我没有得到的最佳实践?或者它是多余的,我根本不应该担心它?
Don*_*art 147
我想我可以从权威机构回答这个问题.
是否有理由使用比使用所有($)符号更好的书籍方式?
没有特别的理由.布莱恩和我都喜欢减少线路噪音..安静比$.因此,本书使用了f . g . h $ x语法.
C. *_*ann 53
它们确实是等价的:请记住,$操作员基本上没有做任何事情.f $ x评估为f x.其目的$是固定行为:右关联和最小优先.删除$和使用括号进行分组而不是中缀优先级,代码片段如下所示:
k = a (b (c (value)))
Run Code Online (Sandbox Code Playgroud)
和
k = (a . b . c) value
Run Code Online (Sandbox Code Playgroud)
更喜欢.版本而不是$版本的原因与在上面的括号上的版本更喜欢这两者的原因相同:审美吸引力.
虽然,有些人可能想知道使用中缀运算符而不是括号是基于一些潜意识的冲动,以避免任何可能与Lisp相似(只是开玩笑......我想?).
scl*_*clv 37
我补充说f . g $ x,f . g是一个有意义的句法单位.
同时,在f $ g $ x,f $ g不是一个有意义的单位.A链$可以说是更为迫切- 第一个得到的结果g的x,然后做f它,然后做foo吧,然后等
同时,一条链.可以说更具说明性,并且在某种意义上更接近以数据流为中心的视图 - 构成一系列函数,并最终将它们应用于某些东西.
Tra*_*own 13
在这个haskell-cafe线程上有一个关于这个问题的有趣讨论.显然有这么认为的右联一个少数人的观点$是"完全错误的",并选择f . g . h $ x了f $ g $ h $ x是侧步进问题的一种方式.