由于我在搜索这个问题时遇到了麻烦,我以为我会在这里发布.
我只是对它背后的逻辑感兴趣,或者只是创作者喜欢使用它++.我的意思是,使用类型字符串连接两个字符串(或更确切地说是列表)的字符串+似乎并不难想象.
编辑:我应该补充一点,在Haskell中必须怀疑它背后的原因,因为+并且++是在类型类中定义的函数,而在java中+,字符串连接的使用只是语言语法的一部分,因此仅受创建者偏好/意见.(到目前为止的答案表明我对自己的怀疑是正确的.)
haskell也来自数学背景,深受数学语法的影响,因此可能有更深层次的原因,而不仅仅是偏好/意见.
Mar*_*ann 16
用于连接两个字符串的字符串的类型类
这样的类型类存在,虽然运算符不是+,但是<>:
Prelude> :m +Data.Monoid
Prelude Data.Monoid> "foo" <> "bar"
"foobar"
Run Code Online (Sandbox Code Playgroud)
在++连接列表时,<>运算符更通用,因为它组合了给定Monoid实例的任意两个值.
正如其他人所指出的那样,+是为Num实例保留的.为什么不Monoid调用二元运算符+呢?因为加法只是无限多的幺半群之一; 乘法是另一个:
Prelude Data.Monoid> Sum 2 <> Sum 3
Sum {getSum = 5}
Prelude Data.Monoid> Product 2 <> Product 3
Product {getProduct = 6}
Run Code Online (Sandbox Code Playgroud)
选择类似<>'the'monoidal运算符的东西是首选,因为它几乎没有语义包袱.