感觉 block 和高阶函数的作用类似,但是概念有不同。如果 ruby 不引入 block 是否会更好一些。
block 机制体现了东方文化的精髓:从宏观到微观的思维方式。
西方的思维方式是从微观到宏观,比如名在前姓在后,地址也是先写街道再到区、市、省、国。东方的思维方式是反过来。
ruby 处处体现着东方的智慧,正是 ruby 的这个特质,让 DHH 深深的着迷,用 ruby 写出了举世瞩目的框架 rails,从而影响了 web 开发的历史进程。
block 和缩进有关,事实上你写 promise 写得多,就会发现一个函数拿两个匿名函数是很扯的。所以 ruby 里干脆只让方法带一个匿名函数,就是 block。
Rust 的闭包就很像是 block 了,Rust 闭包和 Ruby block 相比更像是 function,但和 function 也不完全相同,所以不能算是去掉了 block。
体验是会少很多特殊情况,比如 block 的特殊的上下文跳转规则就不需要了。 而 Ruby block 的上下文跳转也就是在 each 这些里面会使用,Rust 选择了使用 for 语法,其他当作匿名函数的情况 Rust 使用了类似 block 的语法来表达。
相比之下 Rust 闭包设计的更简洁,意外情况更少。像是 Ruby 中 block 可以传给任意方法, block_given?
这些配合 block 的特殊语法就都不需要了