装饰器模式的功能等效吗?

2024-01-05

与装饰器设计模式等效的函数式编程是什么?

例如,你会怎么写这个特殊的例子 https://en.wikipedia.org/wiki/Decorator_pattern#First_example_(window/scrolling_scenario)功能性风格?


在函数式编程中,您可以将给定函数包装在新函数中。

给出一个与您的问题中引用的类似的人为的 Clojure 示例:

我原来的绘图功能:

(defn draw [& args]
  ; do some stuff 
  )

我的函数包装器:

; Add horizontal scrollbar
(defn add-horizontal-scrollbar [draw-fn]
  (fn [& args]
    (draw-horizontal-scrollbar)
    (apply draw-fn args)))


; Add vertical scrollbar
(defn add-vertical-scrollbar [draw-fn]
  (fn [& args]
    (draw-vertical-scrollbar)
    (apply draw-fn args)))

; Add both scrollbars
(defn add-scrollbars [draw-fn]
  (add-vertical-scrollbar (add-horizontal-scrollbar draw-fn)))

它们返回一个新函数,可以在使用原始绘图函数的任何地方使用,但也可以绘制滚动条。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

装饰器模式的功能等效吗? 的相关文章

  • 适用于 F# 联合类型的简洁通用类型处理程序

    我在我的简洁对象上使用类似于枚举的联合类型 type Confidence Low Medium High type Goal Confidence Confidence 我创建了一个自定义类型处理程序以使其正常工作 type UnionH
  • 复合模式/实体系统与传统OOP

    我正在开发一个用 Java 编写的小游戏 但问题与语言无关 由于我想探索各种设计模式 所以我迷上了复合图案 http en wikipedia org wiki Composite pattern 实体系统 我最初读到的here http
  • 为什么 Vector[Option[Int]] 上的 flatMap 其映射器函数结果不是 Vector[Option[Int]] 有效?

    例如 Vector Some 1 Some 2 Some 3 None flatMap n gt n 产生一个Vector 1 2 3 而不是给出错误 正如我在其他语言中看到的那样 flatMap当你有一个产生嵌套的映射器函数时使用 所以我
  • enumFromTo 如何工作?

    我无法将号码添加到Char 以下内容将无法编译 a 1 但是 a z 成功创建一个字符串 其中每个字符值都会递增 有没有一个特殊的函数可以增加Char 我知道我能做到chr ord c 1 如何 a z 或底层enumFromTo函数增加结
  • 尝试使用连续传递风格来避免极小极大算法的堆栈溢出

    我的目标摘要 弄清楚如何使用连续传递样式来避免在使用我认为无法进行尾递归的算法时出现堆栈溢出 或者 找到一种方法使函数成为尾递归 Details 我是 F 以及一般函数式编程 的新手 我正在尝试通过 alpha beta 剪枝实现极小极大算
  • 使用 GHC.Generics 恢复类型定义

    昨天我尝试回答这个问题是关于数据类型的表示 https stackoverflow com questions 22715572 a serializable representation of a data type for client
  • Haskell 中是否可以部分应用第 n 个参数?

    我很好奇是否可以写一个函数apply nth它接受一个函数 参数的数量以及该参数的值 然后返回一个新的 部分应用的函数 我的感觉是 由于类型系统的原因 这是不可能的 但我无法给出令人满意的答案 我也无法提出工作类型签名 如果语言的类型更加松
  • 无法让 wxHaskell 在 Mac 上从 ghci 工作

    我正在尝试跑步一个例子 http www haskell org haskellwiki WxHaskell Quick start Hello world in wxHaskell using EnableGUI function htt
  • F# 中灵活类型注释的用途是什么?

    我正在学习 F 我不明白灵活类型的目的 或者更好的是 我无法理解这样写的区别 set TextOfControl c Control s c Text lt s 并写下 set TextOfControl c T when T gt Con
  • 在函数式编程中画UML类图有什么意义吗?

    我被要求在一个学校项目中展示UML我使用的图表 如果我这样做的话 实现该项目 但我正在做的项目是用 C 语言编写的 并且已经进行了功能编程 因此 我想证明 在不使用面向对象语言的情况下使用类图是没有意义的 但我担心这不是真的 并且无法证实这
  • 记录语法和求和类型

    我有关于 Haskell 中的总和类型的问题 我想创建一个由两个或多个其他类型组成的总和类型 并且每个类型可能包含多个字段 一个简单的例子是这样的 data T3 T1 a Int b Float T2 x Char deriving Sh
  • 为什么阴谋集团重新安装“总是危险的”?

    使用 Cabal 重新安装软件包时 通常会看到以下警告 警告 请注意 重新安装总是很危险的 无论如何继续 此消息背后的一些原因是什么 目前 重新安装软件包意味着破坏性地覆盖已安装的软件包 如果旧包对系统有任何反向依赖性 它们将不再工作 为了
  • 如何在OOP中设计嵌套多态性?

    假设我们的在线商店有一个简单的支付功能 我们希望使用不同的交易处理器来管理不同的交易 交易可以是付款或退款 交易处理器可以是 Paypal 或 Payplug 所以我们有以下课程 class PaymentTransaction imple
  • 追踪 Haskell 中的错误

    我如何获得有关 Haskell 错误发生位置的更多信息 例如 昨天我正在开发一个 Haskell 程序 该程序解析输入文件 转换数据 然后打印出报告信息 有一次 我跑了 main 然后回来了 Prelude read parse error
  • 您最好的 Swing 设计模式和技巧是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在 ASP.NET Core 中全局重用变量

    我必须强制这些变量在我想使用的每个变量上重用 这让我很困难 我需要创建一个类来定义这些变量并在整个程序中使用它们 我怎样才能做到这一点 string RootFolderName Uplaod string ProductPictureFo
  • 我必须实现 Applicative 和 Functor 来实现 Monad

    我正在尝试实现一个 Monad 实例 作为一个更简单的示例 假设如下 data Maybee a Notheeng Juust a instance Monad Maybee where return x Juust x Notheeng
  • Async.Parallel 还是 Array.Parallel.Map?

    我正在尝试实现从 Don Syme 的博客中读到的模式 https blogs msdn microsoft com dsyme 2010 01 09 async and parallel design patterns in f para
  • 全静态方法和应用单例模式有什么区别?

    我正在创建一个数据库来存储有关我的网站用户的信息 我正在使用 stuts2 因此使用 Java EE 技术 对于数据库 我将创建一个 DBManager 我应该在这里应用单例模式还是将其所有方法设为静态 我将使用这个 DBManager 进
  • 使用“lein run”运行时关闭挂钩不会触发

    我有以下代码 ns test hook core defn main addShutdownHook Runtime getRuntime Thread println shutdown println start doseq i rang

随机推荐

  • Stripe 货币 - 所有金额均以美分/百分之一为单位,还是取决于货币?

    我目前正在编写代码以从不同的支付处理器迁移到 Stripe 我知道当货币是美元时 stripe 使用美分 所以条纹 1000 美元 10 00 美元 欧元也是如此 我假设 stripe 1000 EUR 10 00 但日元呢 100 日元大
  • 如何显示微调器的图标并单击打开列表

    我想显示微调器的图标 然后单击打开突出显示所选位置的列表 这是我在微调器中添加项目的方法 public void addItemsOnSpinner try List
  • Python - 当包具有相同名称时从文件导入

    当我开始我的Python项目时 我做了一些愚蠢的事情 我将我的主文件命名为project py 并将一堆逻辑存储在一个也称为project的包中 这是目录结构 project py project other files 问题是 现在我需要
  • WebRTC:匹配最近的同行

    给定一个公共 IP 地址 对等点 A 和许多其他公共 IP 地址 IPv4 和 IPv6 地址的混合 列表 将对等点 A 的 IP 地址匹配的最简单方法是什么 n最近的对等点 而无需让对等点手动相互 ping 通以进行延迟基准测试 我认为使
  • 在 Phonegap 应用程序中获取 Wordpress 帖子时出现 Access-Control-Allow-Origin 错误

    希望有人可以帮助我在phonegap中开发移动应用程序时解决以下问题 我正在尝试从 WordPress 安装中读取帖子 但是当我在 chrome 上运行我的 index html 页面时出现此错误 XMLHttpRequest 无法加载 O
  • 如何通过点击按钮隐藏div?

    在我的 angular js 学习项目中 我想隐藏一个 div 并在单击按钮时显示另一个 div 在此代码中 我希望第一个 div 在单击时隐藏 甚至被销毁 并显示第二个 div 基本上我想要在我的应用程序中从第 1 页转到第 2 页的用户
  • 尝试在powershell中结合替换和新项目

    我有一个任务要更改目录中的一些配置文件 需要更改的文件有7个 全部以 Monitoring Tran xx 开头 这些文件中有某些值 TransactionID 01 AgreedResponseTime 500 SearchProfile
  • 使用 PHPstorm 7 文件观察器将 SCSS / SASS 转换为特殊文件夹中的 CSS

    我使用 PHPstorm 6 并且我的 SCSS 文件被编译到 CSS 文件夹中 所以我有 css main css img js scss main scss variables scss Hier are my definitions
  • 如何找到具有相同子节点的节点

    我有以下 xml 请注意 节点 n1 和 n3 具有相同的子节点 顺序可以不同 如何编写 XSL 转换来识别此类节点
  • 将函数传递给模板组件

    是否可以将函数传递给stencilJs成分 就像是 Prop okFunc gt void 我有一个模态 想要动态调用传递的函数Ok在模态页脚中单击按钮 就像onClick在普通的 HTML 按钮上 是的你可以 这只是正常现象 Prop 声
  • C 套接字发送/接收缓冲区类型

    我正在使用unix套接字 当我的缓冲区是char类型时 即发送和接收字符串 我可以发送 和recv 数据 我使用了 Beej 的套接字指南 所使用的示例用于发送 接收字符串 现在我想在一条消息中发送 接收不同类型的数据 例如 假设在一条消息
  • 在matlab中进行FFT移位的有效方法(不使用fftshift函数)

    http www mathworks com help techdoc ref fftshift html http www mathworks com help techdoc ref fftshift html 如果您检查该链接 这就是
  • 如何以编程方式更改android中图像按钮的大小

    我必须以编程方式创建几个按钮图像按钮 但我不知道如何更改它们的大小 向左和向右更改不起作用 用这个 LinearLayout LayoutParams params button getLayoutParams params width 8
  • 在 HTML 中将表格单元格拆分为两列

    我有下表 table border 1 tr th Header th th Header th th Header th tr tr td nbsp td td nbsp td td Split this one into two col
  • 当未找到特定日期的记录时,返回结果集中的行

    我创建了一个查询来返回以下输出 Date Day Sale Qty Purchase Qty Transfer Qty 05 04 2015 1 11 0 0 07 04 2015 3 0 16 0 08 04 2015 4 12 14 1
  • 在 JavaScript 中使用高阶函数中的原型函数

    我正在尝试使用reduce 连接数组数组 我想我可以使用 Array prototype concat 函数 如下所示 arr 1 2 3 arr reduce a b gt Array prototype concat a b 效果很好并
  • Azure Blob 列表分页

    我的容器中有 3000 个文件 在我的 gridview 中 我显示容器 blob 列表 但 3000 太多了 对性能不利 我的想法 我需要一个分页代码 例如我的网格页面大小是 50 我将在 gridview 中的第一页的容器中显示前 50
  • 具有 Windows 安全性的 Python Selenium 网页

    我正在尝试定期从我组织的网站自动下载一些 CSV 他们非常友善 没有为我提供后端数据库访问或 API 所以我不得不拼凑一些东西来帮我处理这个问题 该网站是一个 Oracle PeopleSoft 网站 会提示Windows Security
  • 在 iPython Notebook 中触发文件下载

    给定一个在外部服务器上运行的 iPython 笔记本 有没有办法触发文件下载 我希望笔记本能够启动将外部服务器上的文件下载到本地渲染笔记本的位置 或者执行从笔记本工作区到文本文件的直接字符串转储 下载到本地 IE 一个强大的工具是 Note
  • 装饰器模式的功能等效吗?

    与装饰器设计模式等效的函数式编程是什么 例如 你会怎么写这个特殊的例子 https en wikipedia org wiki Decorator pattern First example window scrolling scenari