ruby 中不带参数的 DSL 块

2023-12-28

我正在用 ruby​​ 编写一个简单的 dsl。几周前,我偶然发现了一些博客文章,其中展示了如何转换代码,例如:

some_method argument do |book|
  book.some_method_on_book
  book.some_other_method_on_book :with => argument
end

变成更干净的代码:

some_method argument do
   some_method_on_book
   some_other_method_on_book :with => argument
end

我不记得如何做到这一点,我也不确定缺点,但更简洁的语法很诱人。有人对这种转变有任何线索吗?


def some_method argument, &blk
  #...
  book.instance_eval &blk
  #...
end

更新:但是,这省略了书,但不允许您使用该参数。要透明地使用它,您必须以某种方式运输它。我建议在书本上这样做:

class Book
  attr_accessor :argument
end

def some_method argument, &blk
  #...
  book.argument = argument
  book.instance_eval &blk
  #...
end

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

ruby 中不带参数的 DSL 块 的相关文章

  • Ruby IMAP IDLE 并发 - 如何解决?

    我正在尝试构建一个 目前是私有的 Web 应用程序 该应用程序将利用 IMAP IDLE 连接在人们到达时显示电子邮件 我很难弄清楚如何将其组合在一起 以及它如何与我的 Heroku RoR 服务器结合在一起 我编写了一个用于连接到 IMA
  • has_many 关系的动态 class_name

    我正在尝试与动态 class name 属性建立 has many 关系 class Category lt ActiveRecord Base has many ads class name gt lambda return self i
  • 与 Ruby 1.9.X 中的 Iconv.conv("UTF-8//IGNORE",...) 等效吗?

    我正在从远程源读取数据 偶尔会得到另一种编码的一些字符 它们并不重要 我想得到一个 最佳猜测 utf 8 字符串 并忽略无效数据 主要目标是获得一个我可以使用的字符串 并且不会遇到以下错误 编码 UndefinedConversionErr
  • 在 Ruby 中从一个数组减去另一个数组

    我有两个任务数组 创建和分配 我想从创建的任务数组中删除所有分配的任务 这是我的工作代码 但很混乱 assigned tasks user assigned tasks created tasks user created tasks Do
  • 您将如何整理这个控制器逻辑?

    我在控制器中有一些逻辑 如果满足某些条件 它会设置对象的状态 if params concept consulted legal 0 params concept consulted marketing 1 concept attribut
  • 处理中渲染极地带面体时出现问题

    我最近一直在研究 Zohedrons 和Rob Bell http zomadic com 做出了美丽的 我玩了免费的极地带面体 Sketchup 插件 http zomebuilder com 并考虑使用几何图形加工 http proce
  • 如何在启动 Rails 控制台时自动运行代码?

    假设每次 Rails 控制台出现时我都想要一个问候语 Scotts MBP 4 ucode scott rails c Loading development environment Rails 4 2 1 Hello there I m
  • 如何让 mysql 输出 DateTime 到儒略日数?

    基本上我正在使用用于 Ruby 的 MySQL gem http www tmtm org en mysql ruby 并且我对日期比较没有合理的支持 这Mysql Time类只为我提供了访问器方法 如年 月 秒等 如果我可以将其转换为 R
  • 在轮询器内异步运行代码

    在我的 ruby 脚本中 我使用 celluloid zmq gem 我尝试在轮询器内异步运行评估响应 使用 async evaluate response socket read multipart 但是 如果我从循环中删除睡眠 不知何故
  • 如何在 Ruby 中使用循环输出所有可能的组合?

    我刚刚开始学习编程 并试图编写一个输出所有可能组合的函数 到目前为止 我已经能够找到尺寸 2 的所有可能组合 但我不确定如何使代码保持开放式以处理更大尺寸的组合 某种递归会有用吗 我知道我可以使用内置的组合方法 但我只是想弄清楚如何从头开始
  • 使用 Ruby CSV 标头转换器

    假设我有以下课程 class Buyer lt ActiveRecord Base attr accesible first name last name 以及 CSV 文件中的以下内容 First Name Last Name John
  • Ruby 守护进程,用于使临时 Ruby 实例的对象保持活动状态

    Ruby 是否提供了一种在不同运行的 Ruby 进程之间共享变量 更重要的是 类对象和我认为对此有用的任何其他数据抽象 的机制 例如 如果我有一个类被实例化 初始化并仔细调整到某种状态 我希望该状态对我全天所有其他独立的 Ruby 和 Ir
  • cron 爬虫使用 Ruby 中的 Google API 将数据插入 Google 电子表格的授权问题

    我的项目是每天早上 9 00 抓取某些网络数据并将它们放入我的 Google 电子表格中 并且它必须获得读取和写入某些内容的授权 这就是为什么下面的代码位于顶部 Google API CLIENT ID blah blah CLIENT S
  • 如何在 Rails 中制作动态下拉菜单?

    我正在开发一个电子商务项目 其中将有用于选择尺寸的单选按钮 我有一个数量下拉菜单 我想根据用户所选尺寸的可用库存使此下拉列表动态化 谁能告诉我如何在 Rails 上做到这一点 不会用大量的 javascript 扰乱我的视图文件 如果您使用
  • Ruby Regex 舍入尾随零

    我正在寻找一个正则表达式来删除十进制数字中的尾随零 它应该返回以下结果 0 0002300 gt 0 00023 10 002300 gt 10 0023 100 0 gt 100 1000 gt 1000 0 0 gt 0 0 gt 0
  • 如何从 Ruby 2.0 中的字符串数组获取值

    我有这个字符串数组 array nike air nike steam nike softy nike strength smooth sleeper adidas air addidas jogar adidas softy adidas
  • “array.map”是否保留原始顺序?

    我有一个User类has many Jobs 我使用以下代码映射作业 def ranges user jobs map u u start at u end at end 我有一个比较两个数组的规范 my array start1 end1
  • 使用mongoid动态创建索引

    我有一项为我的文档创建新字段的工作 我想在这项工作结束时创建该字段的索引 我试过 Model index field gt 1 and also Mongoid Sessions default rating prediction ensu
  • 使用 rbenv 在 MacOS 上安装 Ruby 2.6.0 失败

    我在 Mojave 上有一台 Mac 它无法安装开发所需的一些基本内容 rbenv install 2 6 0 Downloading openssl 1 1 1d tar gz gt https dqw8nmjcqpjn7 cloudfr
  • 尝试使用 Rails 和 PostgreSQL 生成模型时,命令挂起且没有错误

    使用该命令时 rails generate model Event name string 什么也没发生 我必须按 CTRL c 我使用的版本是 红宝石 2 1 1p76 导轨4 1 0 PostgreSQL 9 3 4 Mac OS X

随机推荐

  • 如果
    之前或之后没有文本,如何删除它? DOMxpath 还是正则表达式?

    我怎样才能删除 br 如果之前或之后没有文字 例如 p br hello p p hello br p 它们应该像这样重写 p hello p p hello p 我应该使用 DOMxpath 还是正则表达式会更好 注 我有一个post h
  • 使用 JAXB 将通用 Java 类绑定到 JSON

    我有以下java类 XmlRootElement XmlSeeAlso DataClass class public static class EnvelopeClass
  • 我可以使用 Perl 的 unpack 将字符串分解为变量吗?

    我的图像文件名由四部分组成 Directory 图像所在的目录 Name 对于艺术网站 这是画作名称参考 File 图像文件名减去扩展名 Extension 图像扩展名 example 100020003000 png 我希望对其进行相应的
  • 在 C 中传递数组、指向 int 的指针

    在使用 Matlab 多年之后 我对 C 语言的数值分析还是个新手 我有一个构造数组的函数 我需要将它返回到 main 我在数组与指针方面遇到了常见的麻烦 并通过摆弄找出了如何做到这一点 但摆弄给我留下了一个基于以下代码的概念性问题 inc
  • 使用 django-tables2 时是否可以将模板标签应用于 ?

    我正在使用 django tables2 为我创建表 我需要将模板标签应用于其中一列中的每个单元格 仅仅为了将模板标签应用到一列 就需要花费大量额外的精力来创建自定义表格布局 有没有办法在 django tables2 中做到这一点 Upd
  • Spark 应用程序中的垃圾收集时间非常长,导致程序停止

    我正在本地模式下运行 Spark 应用程序 我正在使用 Spark 1 5 2 和 scala 2 10 4 当我使用大型数据集作为输入 我不断在日志中收到以下消息 16 01 04 14 44 12 INFO collection Ext
  • 不可终止的 Oracle 会话正在等待“来自客户端的 SQL*Net 消息”事件

    在 Oracle 11gR2 上 我最近遇到了一个非常有趣的情况 涉及阻塞 但空闲 MERGE挂在 a 上的声明 来自客户端的 SQL Net 消息 事件 导致后续并发执行MERGE通过以下方式阻止第一个语句的语句 光标 引脚 S 等待 X
  • 将多个 xdebug 覆盖率结果整理到一份报告中?

    我正在使用php 代码覆盖率 https github com sebastianbergmann php code coverage从一个 HTTP 请求 通过 apache 收集覆盖率信息 我想存储来自多个请求的覆盖率数据 然后将结果整
  • Facebook 2014:如何创建一个带有 iframe 的简单页面?

    我看过大量的指南和 YouTube 教程 但似乎很难创建一个简单的空页面 其中包含一个链接到另一个网站的 Iframe 你知道该怎么做吗 我需要这样的东西 https www facebook com betfred app 3368396
  • 在Heroku应用程序下挂载S3文件夹

    是否有这样的概念 在 Heroku 应用程序下 安装 资产文件夹 然后将其链接到 S3 存储桶 我有一个带有 公共 资产文件夹的节点应用程序 我想 slugignore 本地项目上的 public 文件夹 将 grunt 上传到 s3 存储
  • Mysql:如何选择具有特定值的组?

    假设有这样一个表 mysql gt SELECT FROM tags post id tag id 1 2 1 3 1 1 2 1 2 2 5 rows in set 0 00 sec 字段名称非常不言自明 我想选择post id同时具有
  • 在 mysqli 准备好的语句中使用 null

    在 mysqli 准备好的语句中 NULL 被转换为 对于字符串 或 0 对于整数 我想将它存储为真正的 NULL 有什么办法可以做到这一点吗 可以将 true NULL 值绑定到准备好的语句 读取this http www php net
  • jquery:反转顺序

    如何使用 jquery 反转订单 我尝试了这样的建议 但行不通 block item get reverse each function 看一看here http jsfiddle net BhTEN 我希望盒子能像这样重新排列 18 17
  • 根据某些匹配隐藏某些按钮

    如果符合以下规则 是否可以隐藏某些按钮 以下是用于创建按钮列的代码和用于获取匹配项的代码 我尝试过 BookButtonCell Visible false 但它说它只是只读的 Thanks private void Form1 Load
  • 实体框架查询多个集合

    我的上下文标记为 this Configuration LazyLoadingEnabled false 我想加载选定的相关实体 例子如 context Entry catalog Collection p gt p Products Qu
  • 如何使for循环在无法达到预定数量时返回填充行?

    我正在刮n来自 a b c d 源的相同类型数据的迭代 但有时这些数据源之一将返回小于n值 因为它没有太多可以提取的值 例如我将设置limit 5 but c将只有 3 个值可供抓取 问题是我通过跳过每个列表来组织返回的数据nth 值 因此
  • 因素数据框:将列分成两部分并提取数字

    我有以下数据框 df 下面是我在数据框中的第一列df 1 Well and Depth Black Peak 1000 Black Peak 1001 Black Peak 1002 Black Peak 1003 RStudio 目前将此
  • 在 Playground 中处理实时照片

    我已经在网络上进行了大量搜索 但我目前正在尝试在 Playground 中使用 实时照片 我知道框架 PHLivePhoto 我只是不知道是否可以在 Playground 中使用它们 因为没有太多可以 导入 的内容 因为似乎没有任何可用的
  • 如何在 JSDoc 中指定 Promise 的解析和拒绝类型?

    我有一些返回承诺对象的代码 例如使用Q https github com kriskowal qNodeJS 的库 var Q require q returns function task err return err Q reject
  • ruby 中不带参数的 DSL 块

    我正在用 ruby 编写一个简单的 dsl 几周前 我偶然发现了一些博客文章 其中展示了如何转换代码 例如 some method argument do book book some method on book book some ot