gpt4 book ai didi

ruby - Ruby 中有标识函数吗?

转载 作者:行者123 更新时间:2023-12-01 00:44:48 24 4
gpt4 key购买 nike

我目前正在编写一个 Ruby 类,它提供了一个基本 lambda 的菜单,可以混合和匹配来创建一组新的 lambda。 (这是一种进化算法,需要根据数据集对适应度函数进行大量定制)

发生这种情况的配置火灾充满了这样的东西
function_from_modifier.(base_function, either.(modifier_from.(case),->(x){x}) )
恒等函数->(x){x}在配置文件中弹出了几次,而且看起来很丑,所以我想知道是否有更优雅的方法来做到这一点。类似于 Elixir 的 &(&1)在 Ruby 中可能吗?

最佳答案

tl;博士 总结:Ruby 核心或标准库中没有标识函数。事实上,核心或标准库中的任何地方都没有任何函数(在预定义 Proc 实例的意义上)。

Ruby 中的一等函数有点像二等函数(如果有道理的话)。

Yukihiro "matz"Matsumoto 在第一次设计 Ruby 时,他调查了其他语言的标准库,用于一等和高阶函数的用途,他发现绝大多数用途是:

  • 单个函数参数
  • 未存储、传递或返回的
  • 仅立即调用一次或多次

  • 高阶函数的很大一部分是控制结构(例如 if,它接受一个条件和两个结果),但是他想将其建模为内置语言结构,而不是库函数。

    因此,他决定针对他发现的常见情况优化 Ruby,并创建块。

    块不是一流的功能:
  • 它们不是对象
  • 您无法向他们发送消息
  • 它们不能存储在变量中
  • 不能退货
  • 它们不能作为参数自由传递,您最多只能传递一个并且只能在参数列表中的特殊位置传递

  • 因此,与块相比,真实(从某种意义上说它们是实际对象)一等函数( Proc s)在某种意义上是二等语言特征:
  • 它们在内存中更贵
  • 调用它们会更慢
  • 创建它们在语法上更麻烦

  • 因此,从本质上讲,在尝试以自己的方式使用 Ruby 时遇到限制也就不足为奇了:这不是 Ruby 的设计目的。

    过去,我曾经随身携带一个带有如下常量的辅助库:

    class Proc
    Id = -> x { x }
    end

    但我停止这样做了。如果我想用 Ruby,我就用 Ruby 作为面向对象的语言,如果我想做花哨的 FP,我用 Haskell 或 Scala 或 Clojure 或 Racket 或……

    关于ruby - Ruby 中有标识函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59115314/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com