楼主的例子,包括回帖里的解释递归并不是在说函数式编程。 你们只是在解释一个函数的用法,以及一些特殊的机制,对于这两者,是几乎每种语言都可以做到的,并非 ruby 的优点。 而函数式编程,就如面向对象编程一样,是个“伪概念”,但又确实的影响着编程模式,就如 C 可以作面向对象编程,但语言标准不方便于该编程模式一样甚至更甚之,ruby 的语言标准既不方便于函数式编程,其机制也不利于函数式编程。 所谓语言标准不方便,函数式编程的一个基本行为模式叫做"依赖注入",即函数作为值传递,其他语言完全可以通过位置决定其性质,如 python,lisp-1,而 ruby 不行,ruby 必须专门通过 lambda 声明,且通过.call 来决定性质,这比其他多范型的或直接自称为函数式的语言要麻烦的多。而 ruby 的 c 实现也决定了 ruby 不适合函数式编程,其函数的深度与底层运算复杂度的正相关不呈线性,复杂度的增长远迅于深度增长。 ruby 的性能调优中,一大项就是对函数深度的浅化。老老实实的做面向对象式的编程。玩具应有玩具的觉悟。