Tim*_*o Y 4 ruby functional-programming
我目前正在编写一个 Ruby 类,它提供了一个基本 lambdas 的菜单,可以混合和匹配来创建一组新的 lambdas。(这是一种进化算法,需要根据数据集对适应度函数进行大量定制)
发生这种情况的配置火灾充满了这样的东西
function_from_modifier.(base_function, either.(modifier_from.(case),->(x){x}) )
->(x){x}配置文件中多次弹出identity函数,看起来很丑,所以想知道有没有更优雅的方法。像 Elixir 这样的东西&(&1)在 Ruby 中是可能的吗?
tl;dr总结:Ruby 核心或标准库中没有标识函数。事实上,不存在的功能(在预先定义的意义Proc的实例)在所有在核心或标准库的任何地方。
Ruby 中的一等函数有点像二等函数(如果有道理的话)。
Yukihiro "matz" Matsumoto 在第一次设计 Ruby 时,他调查了其他语言的标准库,用于一等和高阶函数的用途,他发现绝大多数用途是:
高阶功能的显著部分,其中,这是不正确的控制结构(例如,if这需要一个条件,两成方面的后果),然而他要模拟内置的语言结构,而不是库函数。
因此,他决定针对他发现的常见情况优化 Ruby,并创建blocks。
块是不是一流的功能:
因此,与块相比,真正的(从某种意义上说它们是实际对象)一等函数(Procs)在某种意义上是二等语言特征:
因此,从本质上讲,在尝试以自己的方式使用 Ruby 时遇到限制也就不足为奇了:这不是 Ruby 的设计目的。
过去,我曾经随身携带一个带有如下常量的辅助库:
class Proc
Id = -> x { x }
end
Run Code Online (Sandbox Code Playgroud)
但我停止这样做了。如果我想用 Ruby,我就用 Ruby 作为面向对象的语言,如果我想做花哨的 FP,我用 Haskell 或 Scala 或 Clojure 或 Racket 或……