绑定和解构块参数

2023-12-05

在 ruby​​ 中,有没有一种方法可以同时将块的参数绑定到局部变量并对其进行解构?

谷歌搜索没有找到我任何东西,并且在 IRB 中玩也毫无结果,但我想我回想起了类似于以下功能的功能:

>> [[1, 2], [3, 4]].map{|x@(y, z)| [x, y, z]}
=> [[[1, 2], 1, 2], [[3, 4], 3, 4]]

Where x捕获迭代对象的每个顶级元素(在本例中首先[1, 2], then [3, 4]) and y and z捕获对象内部的子元素x (1 then 3 and 2 then 4, 分别)。

Edit

我突然想到,我投射到 Ruby 中的功能实际上来自 Haskell:Haskell 中的列表中的“@”符号是什么意思?

不过,在 Ruby 中是否有一种优雅的方法可以实现同样的目的?


我想要一个将 [[1, 2], [3, 4]] 分配给 x,[1, 2] 分配给 y,[3, 4] 分配给 z 的解决方案

这个怎么样:

irb(main):001:0> y, z = x = [[1, 2], [3, 4]]
=> [[1, 2], [3, 4]]
irb(main):002:0> y
=> [1, 2]
irb(main):003:0> z
=> [3, 4]
irb(main):004:0> x
=> [[1, 2], [3, 4]]

更新(让我们把它放入一个块中)

这对你来说合适吗:

[[1, 2], [3, 4]].tap do |arr| 
  y, z = x = arr 
  p x # => [[1, 2], [3, 4]]
  p y # => [1, 2]
  p z # => [3, 4]
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绑定和解构块参数 的相关文章

随机推荐

  • 在 Python 中迭代双端队列的时间复杂度是多少?

    迭代的时间复杂度是多少 或者更准确地说 通过 Python 集合库中的双端队列进行每次迭代的时间复杂度是多少 一个例子是这样的 elements deque 1 2 3 4 for element in elements print ele
  • 无法使用 ruby​​ 脚本从亚马逊 s3 删除文件

    我在用AWS SDK 红宝石用于删除保存在我的亚马逊 s3 帐户的存储桶中的文件 但我不明白为什么我能够使用以下代码从 S3 存储桶中删除所需的文件 这是我的代码 require aws sdk v1 require aws sdk ENV
  • 如何删除 io.on('connection') 监听器?

    我有一些用于 socket io 服务器的代码 大致如下 var io require socket io io io server io on connection connectionHandler 这一切都很好 我想知道如何删除该连接
  • 链接边框和下三角形透明

    我找不到我需要的东西 我有这个代码
  • Android - 获取自定义对话框中组件的句柄

    我正在尝试通过单击菜单中的选项来创建自定义对话框 我继续启动一个新活动 其 Intent 指向 customTextMessageDialog I 我能拿到手柄使用 phoneNumber EditText dialog findViewB
  • 如何在 Exoplayer 中添加下一个、上一个、快退和前进的侦听器

    我正在 ExoPlayer 上工作 我想自定义 ExoPlayer 并监听事件下一个 上一个 倒带 前进 以便当用户单击下一个按钮时播放列表中的下一个视频将播放 而使用上一个时将播放播放列表中的上一个视频将播放播放列表等 我正在使用自定义布
  • 有没有办法回答(或忽略)所有 y/n 提示的“y”?

    我有一个 Jupyter 笔记本 里面有很多大变量 有一次我想扔掉所有我已经用完的变量 我使用 reset selective 变量名来清除每个变量 但这些变量有 60 个 当我运行包含所有 60 个提示的块时 它会要求我为每个清除输入 y
  • 使用c#在Word中按名称访问表

    我有一个包含很多表格的文档 我想使用 C 和 Microsoft Office Interop Word 修改这些表 我读到我可以使用 Tables 接口迭代所有表 问题 是否可以为表指定名称 ID 并通过名称访问表 就像 Powerpoi
  • 通过 github API 关闭拉取请求

    根据我们应用程序的设计要求 我们曾经使用 gitlab API 删除 Gitlab 中的合并请求 现在我们正在迁移到 Github 我正在寻找类似的 API 调用来关闭 Github 上的拉取请求 我通读了文档here 但它没有回答我的问题
  • 对数据框的每一行进行排序[重复]

    这个问题在这里已经有答案了 我正在尝试使用这一行对数据框的每一行进行排序 sapply df function x sort x 但是 对列进行排序而不是对行进行排序 例如 这个数据框 5 10 7 1 5 6 3 9 2 4 4 5 1
  • *a, b, c = line.split() 中的星号有什么作用?

    Assume line is Chicago Sun 01 52 什么是 a b c line split 做 特别是 星号的意义是什么 编辑 经过测试 似乎 Chicago Sun and 01 52 都存储在a b and c 星号似乎
  • 一级缓存可以与 ICriteria 或其他 API 一起使用吗?

    In NHibernate使用时您可以轻松地从一级缓存中受益Load or Get方法 但是关于ICriteria HQL Linq to NHibernate and QueryOver 他们也使用一级缓存吗 他们使用它来返回实体 但查询
  • PowerMockito.doReturn 返回 null

    这是我正在测试的课程 public class A public Integer callMethod return someMethod private Integer someMethod Some Code HttpPost http
  • 在Linux上,如何确保解锁被锁定在死亡/终止的线程中的互斥体?

    这是一道面试题 在 Linux 上 如何确保解锁被锁定在死亡 终止的 POSIX 线程中的 POSIX 互斥锁 我的想法 Linux向程序发送kill或终止信号时会自动释放它吗 但是 我找不到有关操作系统如何执行此操作的更多详细信息 tha
  • Facebook.php 和 facebookapi_php5 文档

    我在哪里可以找到关于这两个 PHP 文件的良好文档以及每个函数的更详细和深入的使用 Facebook 文档 信息不够丰富 哈哈 我感受到你的痛苦 facebookapi php5主要是各个API方法 facebook 主要用于会话 身份验证
  • 如何动态添加新方法到 php 对象?

    如何 即时 向对象添加新方法 me new stdClass me gt doSomething function echo I ve done something me gt doSomething Fatal error Call to
  • Cordova 文件插件在 Android 中从未准备就绪

    我有一个非常简单的 Cordova 应用程序 只有一个插件 org apache cordova file 当我在 Android 模拟器中模拟该应用程序时 deviceready事件永远不会被触发 我得到以下输出 D CordovaLog
  • Zend Framework 2 - 注释表单不起作用

    谢谢 光新藤我调查了AnnotationForms这似乎是最好的解决方法ModelForms 但示例所示here对我不起作用 use Zend Form Annotation AnnotationBuilder builder new An
  • 构建项目时出现转换异常[重复]

    这个问题在这里已经有答案了 当我尝试运行我的应用程序时 出现以下错误 Error Execution failed for task app transformClassesWithDexForDebug gt com android bu
  • 绑定和解构块参数

    在 ruby 中 有没有一种方法可以同时将块的参数绑定到局部变量并对其进行解构 谷歌搜索没有找到我任何东西 并且在 IRB 中玩也毫无结果 但我想我回想起了类似于以下功能的功能 gt gt 1 2 3 4 map x y z x y z g