Ruby 编程中的状态管理、模块化组织与记忆化技术
1. 最小化可变状态与减少副作用
在 Ruby 中,尽管它是面向对象的语言,依赖可变状态,但我们仍能编写无副作用的代码。以 Enumerable#map 为例,我们可以实现一个简单的 naive_map 方法:
def naive_map(array)
array.each_with_object([]) { |e, arr| arr << yield(e) }
end
运行示例:
a = [1,2,3,4]
naive_map(a) { |x| x + 1 }
# => [2, 3, 4, 5]
a
# => [1, 2, 3, 4]
此代码生成了一个新数组,未修改原数组,属于无副作用代码。不过,它在构建返回值时使用了可变状态。若要实现真正的无状态代码,可利用 Array#+ 操作,重写 naive_map 方法:
def naive_map(array, &block)
return [] if array.empty?
[ yield(array[0]) ] + naive_map(array[1..-1], &block)
end
该方法通过递归调用
超级会员免费看
订阅专栏 解锁全文
4

被折叠的 条评论
为什么被折叠?



