types - 为什么 Elm 使用 '++' 运算符来连接字符串?

标签 types syntax string-concatenation elm

我正在学习 Elm,我发现它有很多吸引人的地方,比如它的优雅和简单。然而,我觉得令人困惑的一个方面是它使用“++”来连接字符串。例如:

> "hello" ++ " world"
"hello world"

加法以您期望的方式工作。
> 2 + 3 + 9
14

大多数高级语言(例如 C#/Java/JavaScript/Python)使用单个加号“+”以类似的方式将多个数字相加来连接字符串。它看起来更直观,因为在连接字符串(如对数字求和)时有一定的一致性。

有谁知道在这种情况下使用++ 而不是 + 的设计决策背后的逻辑?

最佳答案

Elm 允许您定义多态函数。

参数多态是指函数可以应用于任何类型的元素:

f : (a, b) -> (b, a)
f (x, y) = (y, x)

Ad-hoc 多态性是指一个函数可以应用于某些类型的元素:
g : appendable -> appendable -> appendable -> appendable
g x y z = x ++ y ++ z

h : number -> number -> number
h x y = (x + 2) * y

类型变量 numberappendable是特殊的,因为它们代表所有 Elm 类型的子集。 ListStringappendable类型同时 FloatInt是数字类型。

理论上可以改为定义 hasPlus类型变量将包括 List , String , FloatInt ,但是在定义多态函数时,您需要注意 x + y 是可能的不同于 y + x如果你真的在考虑数字,那将是一个相当大的负担......

关于types - 为什么 Elm 使用 '++' 运算符来连接字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42416602/

相关文章:

python - 如何更改 dask 数据框中列的数据类型?

types - 如何检查类型的可变性

haskell - Haskell 中类型的模式匹配

syntax - 在 WPF 中使用快速彩色文本框进行语法高亮显示

php - 连接字符串或使用多个回显参数 : which is faster?

objective-c - 如何在 Objective-C 中将字符串连接在一起?

arrays - 不能在赋值 : need type assertion 中使用字(类型接口(interface) {})作为类型字符串

ASP.NET MVC 3 Razor 语法问题

bash - 带大括号的 bash 循环?

c++ - 如何将字符数组的一部分附加到字符串?