为什么带有 splat 参数的 Ruby 过程/块的行为与方法和 lambda 不同?

2023-11-27

为什么带有 splat 参数的 Ruby (2.0) 过程/块的行为与方法和 lambda 不同?

def foo (ids, *args)
  p ids
end
foo([1,2,3]) # => [1, 2, 3]

bar = lambda do |ids, *args|
  p ids
end
bar.call([1,2,3]) # => [1, 2, 3]

baz = proc do |ids, *args|
  p ids
end
baz.call([1,2,3]) # => 1

def qux (ids, *args)
  yield ids, *args
end
qux([1,2,3]) { |ids, *args| p ids } # => 1

这是对此行为的确认,但没有解释:http://makandracards.com/makandra/20641-careful-when-calling-a-ruby-block-with-an-array


有两种类型Proc对象:lambda它以与普通方法相同的方式处理参数列表,并且proc使用“技巧”(过程#lambda?). proc如果它是唯一的参数,则将展开一个数组,忽略额外的参数,分配nil给失踪的人。你可以部分模仿proc行为与lambda使用解构:

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

为什么带有 splat 参数的 Ruby 过程/块的行为与方法和 lambda 不同? 的相关文章

  • 如何使用 Nokogiri 获取某些标签之后或之前的文本

    我有一个 HTML 文档 如下所示
  • 类、模块、它们的特征类和方法查找

    我们来开公开课吧Module并向其中添加一个方法 class Module def foo puts phew end end 我可以通过这样做来调用这个方法 Class foo 这是可以理解的 因为类Class is Class 其超类是
  • 中继命令和无参数执行方法

    我目前正在学习 WPF 和 MVVM 我想我已经了解了大部分内容及其工作原理 但我在使用 RelayCommand 或 DelegateCommand 时遇到了一些我不明白的问题 我认为这与代表的工作方式有关 请注意 下面的代码目前仅处于测
  • 在 lambda 中延迟初始化和缓存内部值的简洁方法

    首先用简单的方法让代码自己说话 int heavy calc needed to be called once sleep 7500000 years return 42 int main auto foo And cached for l
  • 如何将两个不同的哈希数组中的值添加在一起?

    我有两个哈希数组 哈希值的键不同 player scores1 first name gt Bruce score gt 43 time gt 50 first name gt Clark score gt 45 minutes gt 20
  • Rails 中的 PDF 导出

    我需要将包含一些图表的 HTML 页面导出为 PDF 有哪些好的 gem 可以做到这一点 PDFKit http railscasts com episodes 220 pdfkit http railscasts com episodes
  • 使用 lambda 对多列进行分组

    如何使用 lambda 对多列进行分组 我看到了如何使用 linq toEntity 执行此操作的示例 但我正在寻找 lambda 形式 var query source GroupBy x gt new x Column1 x Colum
  • Watir 更改 Mozilla Firefox 首选项

    我正在使用 Watir 运行 Ruby 脚本来自动执行一些操作 我正在尝试自动将一些文件保存到某个目录 因此 在我的 Mozilla 设置中 我将默认下载目录设置为桌面并选择自动保存文件 然而 当我开始运行脚本时 这些更改并未反映出来 似乎
  • 在我的 ramaz 应用程序上显示 £ 符号时,我收到“不兼容的字符编码:CP850 和 UTF-8”

    显示时收到 不兼容的字符编码 CP850 和 UTF 8 我的 ramaz 应用程序上的符号 我怎样才能摆脱这个错误 我的 head 标签中有 UTF 8 元标签 当我输入 用键盘输入符号 看 我已将以下代码放入我的 ruby 文件中 但它
  • 如何在 Rails 4 中使用 params.require

    我有一个像这样的私有方法 用于有四个字段的注册表单 firstname email password and confirm password 我不知道如何检查password confirmation def user params pa
  • 如何从 pandas 数据框中的列中删除字符串值

    我正在尝试编写一些代码 以逗号分隔数据帧列中的字符串 因此它成为一个列表 并从该列表中删除某个字符串 如果存在 删除不需要的字符串后 我想再次以逗号加入列表元素 我的数据框如下所示 df Column1 Column2 0 a a b c
  • Rails 控制台无法运行

    rbenv 红宝石版本 2 6 6 导轨版本 5 1 4 我正在较旧的代码库中工作 ruby 2 6 6 rails 5 4 1 这是我每天使用的代码库 我必须通过 rbenv 下载一个新的 ruby 版本作为单独的存储库 这样做在我的旧代
  • Rails/Nginx 中的超时——最佳实践

    我正在开发一个应该在 Nginx 服务器上运行的 Rails 应用程序 根据输入 应用程序可能需要很长时间来处理请求 或者在出现错误时挂起 因此我想防止进程永远运行 除了确保客户端收到超时信号的 Nginx 配置之外 我想我可能仍然需要确保
  • 如何从 ruby​​ 中的字符串中删除所有非数字?

    用户输入数字的形式如下 1 800 432 4567 800 432 4567 800 432 4566 800 432 4567 1 800 432 4567 800 432 4567 我希望所有这些都变成没有特殊字符的剥离版本 例如18
  • “rmagick”gem 安装问题

    我在尝试在 centos 上安装 rmagick gem 时遇到问题 以下是我得到的输出 谁能帮我识别一下我缺少什么包裹 我已经安装了所有提到的另一个堆栈溢出线程 RMagick安装错误 https stackoverflow com qu
  • Rails:named_scope、lambda 和块

    我认为以下两个是等效的 named scope admin lambda company id conditions gt company id company id named scope admin lambda do company
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被
  • 已定义方法的 Ruby 钩子?

    我一直在谷歌上搜索这个问题 但找不到答案 这让我认为答案是否定的 但我想我会在这里问 以防有人确切知道 Ruby 是否有一个钩子来定义方法 即在模块或类上 如果没有 是否有人足够熟悉该实施的情况main对象以了解它到底如何将方法复制到Obj
  • 如何确定 std::function 的参数数量?

    我有以下问题 假设您想编写一个可以采用 lambda 表达式的通用函数 我知道如果参数是 std function 类型 那么我不仅可以使用 lambda 还可以使用函数 甚至可以使用函数指针 所以第一步 我做了以下事情 void prin
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外

随机推荐

  • 在 Android Studio 中安装 Vuforia

    谁能给我一些关于如何在 Android Studio 中安装 Vuforia 的说明 我正在制作一个新应用程序 需要将增强现实与 Vuforia 结合使用 希望你能帮我 多谢 您需要执行以下步骤 请阅读我们的入门指南 了解有关设置的说明 J
  • 为什么短破折号 (-) 会触发非法 XML 字符错误 (C#/SSMS)?

    这不是一个如何克服困难的问题 XML 解析 非法 xml 字符 错误 但关于why它正在发生吗 我知道有修复 1 2 3 但在选择最佳解决方案之前需要知道问题出在哪里 是什么导致了错误 我们使用 C 调用基于 Java 的 Web 服务 根
  • 在Java中,this.method()和method()有什么区别?

    打电话有什么区别吗this method and method 包括性能差异 唯一重要的是你是否使用OuterClass this method e g class OuterClass void method class InnerCla
  • 将 C# 项目从 Visual Studio 2010 降级到 Visual Studio 2008

    我编写了一个 Visual C 2008 Windows 窗体应用程序 然后我在装有 Visual Studio 2010 的计算机中编辑了代码 但我无法再在 Visual 2008 中运行它 有什么办法可以做到这一点 当你说 无法再运行它
  • 在ggplot2中组合条形图和折线图(双轴)

    I have double y axis图表制作于Excel 在 Excel 中 它只需要基本技能 我想做的是使用复制此图表ggplot2图书馆在R 我已经这样做了 但我需要绘制响应2nd y axis 我附上我使用过的可重现代码 Data
  • 缺少ServletRequestParameterException

    我将一个 formData 对象传递到我的 Spring 后端 imageBanner banner File bannerPath string id number callback response gt void var formDa
  • 实体框架 4 和默认值

    我可能遗漏了一些东西 但是实体框架 4 生成的 SQL Server 2008 R2 数据库缺少我通过 EF 设计器配置的默认值 有什么想法我可能做错了什么吗 原因是因为您可以在概念模型和数据库默认值中设置的默认值是完全不相关 让我们考虑一
  • Excel 支持的 Html 元素

    最近我发现 如果您将一些 html 标记保存为 xls 它将在 Excel 中打开 与您的所有样式完美配合 例子 我的文件 xls table tr td style background red text align center bor
  • 如果加载的 ng 样式图像无效,则背景默认图像

    我像这样向我的 div 添加背景图像 ng style background image url myvariable for image gt 其中 myvariable for image 是类似 examplesite image i
  • Bulletproof 使用 Python 进行编码

    关于Python2中unicode的问题 据我所知 我应该始终decode我从外部 文件 网络 读到的所有内容 decode使用参数中指定的字符集将外部字节转换为内部 Python 字符串 所以decode utf8 意味着外部字节是 un
  • 通过 ng-include 渲染字符串模板

    我正在尝试渲染一段 html 可在动态路线上使用 该路线是通过 http get 调用 它返回一段html 举个例子 我尝试加载这个 html 部分 h1 pagetitle h1 this is a simple page example
  • 如何让 WPF ClipToBounds 工作?

    我有一个在 WPF 中的 Image 对象内显示图像的应用程序 该图像包含在一个控件中 其 xaml 如下所示
  • 当 doInBackground() 执行时,如何在 android 中显示进度旋转器

    这是我的 Activity 类 我使用 AsyncTask 从服务器获取数据 public class UserProfileActivity extends Activity private ImageView userImage pri
  • 如何从 Visual Studio 为 Xamarin Forms 项目创建 IPA 文件

    I have Xamarin Forms在 Windows 10 PC 中项目 Visual Studio 2017 我的VS通过网络连接到mac机器 我想从 Xamarin 表单项目创建 IPA 文件 在谷歌中没有一篇文章可以解释这一点
  • 如何在 F# 中创建 .NET 兼容事件?

    我正在尝试发布 F 类型的事件 但我希望将其视为 C 或 VB 的事件 以前正确的做法似乎是 IEvent create HandlerEvent 但最新版本的 F 中不存在此函数 那么现在正确的做法是什么呢 事件不是我的强项 但这个示例似
  • BackgroundWorker 和 WebBrowser 控件

    是否可以 建议在 Web 浏览器控件中使用后台工作线程 我正在创建一个机器人 它可以在 google 中搜索关键字 然后检查前 10 页中的网站以查看网站是否排名 用户最多可以提供20个站点进行检查 并且可以使用代理 所以理想情况下我希望有
  • 如何在PHP中获取客户端IP地址

    如何使用 PHP 获取客户端 IP 地址 我想保留通过 IP 地址登录我的网站的用户的记录 Answer recommended by PHP Collective 无论您做什么 请确保不要信任客户端发送的数据 SERVER REMOTE
  • 如何在 Swift 中旋转 UIButton 和 UILabel 的文本?

    如何旋转文本UIButton and UILabel 90度 180度 Note 在您将其标记为重复之前 我有意将我的问题建模为该问题的 Swift 版本 如何在 Objective C 中旋转 UIButton 和 UILabel 的文本
  • 使用 Html Agility Pack 从 HTML BODY 节点提取内部文本

    需要一些有关 HTML Agility Pack 的帮助 基本上我想抓住纯文本在 HTML 的 body 节点内 到目前为止 我已经在 vb net 中尝试过 但它无法返回内部文本含义 没有看到任何变化 至少从我看来是这样 Dim html
  • 为什么带有 splat 参数的 Ruby 过程/块的行为与方法和 lambda 不同?

    为什么带有 splat 参数的 Ruby 2 0 过程 块的行为与方法和 lambda 不同 def foo ids args p ids end foo 1 2 3 gt 1 2 3 bar lambda do ids args p id