Ruby Ruby 引入 block 机制是否利大于弊

lilijreey · 2018年10月04日 · 最后由 nouse 回复于 2018年10月17日 · 537 次阅读

感觉block 和高阶函数的作用类似,但是概念有不同。 如果ruby不引入block是否会更好一些。

共收到 10 条回复

没有block我就不用ruby了,jquery特地从ruby借鉴了each方法

block机制体现了东方文化的精髓:从宏观到微观的思维方式。
西方的思维方式是从微观到宏观,比如名在前姓在后,地址也是先写街道再到区、市、省、国。东方的思维方式是反过来。

ruby处处体现着东方的智慧,正是ruby的这个特质,让DHH深深的着迷,用ruby写出了举世瞩目的框架rails,从而影响了web开发的历史进程。

block 就是一个高阶函数,但是又没有函数那么灵活,而且又增加了复杂度,唯一的好处就是写起来方便。 好像引入 block 是因为性能考虑

光去掉 block 不能让拧巴的东西变得不拧巴,你还需要去掉函数不用括号就可以调用的设定,然而那样就不是 ruby 了

Block难道不是Ruby的精华之一么……

block就是一个匿名函数吧?

sevk 回复

不是,完全不是

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 的特殊语法就都不需要了

sevk 回复

不是,你试试在block里面return

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册