Go纯函数实现Map

这是篇水文。

函数式编程鼓励无状态编程,用函数模拟状态。在编程中,最基础的数据容器是Map,纯函数怎么实现Map呢?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
type Map func(string) string

func MapOf(kvs ...string) Map {
return func(key string) string {
for i := 0; i+1 < len(kvs); i += 2 {
if kvs[i] == key {
return kvs[i+1]
}
}

return ""
}
}

func Put(m Map, k, v string) Map {
return func(key string) string {
if key == k {
return v
}
return m(k)
}
}

func Get(m Map, k string) string {
return m(k)
}

来点测试。

1
2
3
4
5
6
7
8
9
func TestFnMap(t *testing.T) {
m := MapOf("a", "b", "c", "d")
t.Log(Get(m, "a")) // => b
t.Log(Get(m, "c")) // => d

m2 := Put(m, "foo", "bar")
t.Log(Get(m2, "foo")) // => bar
}


Go纯函数实现Map
https://a3d21.github.io/2022/12/27/2022-12-27-go-fn-map/
作者
a3d21
发布于
2022年12月27日
许可协议