将方法传递给迭代器方法时发生了什么

2023-12-13

众所周知,谁可以通过 a 将方法传递给迭代器方法&: prefix.
例如:

["a", "b"].map(&:upcase) #=> ["A", "B"] 
def rettwo
  2
end
["a", "b"].map(&:rettwo) #=> [2, 2]

问题是,当我编写一个方法时,传递一个方法&:前缀,我收到一条错误消息:“ArgumentError:没有给出接收者”。
让我展示一下代码:

def a_simple_method &proc
  puts proc.class # it shows `Proc`
  proc.call
end
def a_iterator_method
  puts yield
end

a_simple_method &:rettwo #=> ArgumentError: no receiver given
a_iterator_method &:rettwo #=> ArgumentError: no receiver given

我缺少什么,如何map就像数组的方法一样处理它


这是有效的。解释如下。

class String
  def rettwo
    self + self
  end
end

def a_simple_method &proc
  proc.call('a')
end

def a_iterator_method
  yield 'b'
end

a_simple_method(&:rettwo) # => "aa"
a_iterator_method(&:rettwo) # => "bb"

The &:构造称为Symbol#to_proc。它将符号变成过程。该过程需要一个接收者作为第一个参数。其余参数用于调用过程。您没有传递任何参数,因此出现“未给出接收者”错误。

以下是附加参数的演示:

class String
  def say name
    "#{self} #{name}"
  end
end

def a_simple_method &proc
  proc.call('hello', 'ruby')
end


a_simple_method(&:say) # => "hello ruby"

这是 2008 年的一些博客文章中对 Symbol#to_proc 的定义。现代的 Symbol#to_proc 似乎是用 C 实现的,但这仍然可以帮助理解。

class Symbol
  def to_proc
    Proc.new { |*args| args.shift.__send__(self, *args) }
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将方法传递给迭代器方法时发生了什么 的相关文章

  • Rails 4:资产未在生产中加载

    我正在尝试将我的应用程序投入生产 但图像和 CSS 资源路径不起作用 这是我目前正在做的事情 图像资源位于 app assets images image jpg 样式表位于 app assets stylesheets style css
  • 如何使用本地安装的gems执行Ruby程序?

    我已经使用安装了我的依赖项 bundle package 然后将它们传输到离线服务器并运行 gt bundle install local Using mime types 1 19 Using rest client 1 6 7 Usin
  • Rails 3 在 Ruby 1.9.2 上初始化非常慢

    我使用 RVM 来管理环境 安装了 Ruby 1 9 2 p136 我认为是最新版本 和 Rails 3 创建了 gemset 并运行捆绑器 到目前为止一切正常 但 Rails 在运行命令 即生成 销毁 rake 等 时初始化速度非常慢 完
  • 多重要求和允许强参数rails 4

    在下面的情况下 我尝试使用强参数 我想要求email address password并允许remember me fields 但像下面这样使用它只允许最后一行在方法示例中 在下面的情况下 它只需要params permit rememb
  • 在 ruby​​ 中下载多个 FTP 文件,如 d*.txt

    我需要连接到 ftp 站点并下载一堆名为 D txt 的文件 最多 6 个 你能帮我用 Ruby 编写这个代码吗 下面的代码只是 ftp Net FTP new ftp server site ftp login user pwd ftp
  • 在 Ruby 中创建一个空文件:相当于“touch”?

    创建一个的最佳方式是什么emptyRuby 中的文件 类似于 Unix 命令的东西 touch https en wikipedia org wiki Touch 28Unix 29 touch file txt FileUtils tou
  • c# 通过内存地址调用方法

    我正在尝试在 C 中的指定内存地址调用函数 以下是我在 C 中的操作方法 typedef void do int i auto doActor do 0xAAAABEEF doActor 1 如果可能的话 如何在 C 中复制这种行为 对 C
  • ruby 正则表达式匹配模式的多次出现

    我正在寻找构建一个 ruby 正则表达式来匹配模式的多次出现并将它们返回到数组中 模式很简单 即 两个左括号 一个或多个字符 后跟两个右括号 这就是我所做的 str Some random text lead first name and
  • Ruby/Rails 集合到集合

    我有两个表与一个连接表连接 这只是伪代码 Library Book LibraryBooks 我需要做的是 如果我有一个图书馆的 id 我想获取该图书馆拥有的所有书籍所在的所有图书馆 因此 如果我有图书馆 1 图书馆 1 中有书籍 A 和
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • 我可以将 MAMP (MySQL) 或 XAMPP (MySQL) 与 Ruby on Rails 3 一起使用吗?

    我可以将 MAMP MySQL 或 XAMPP MySQL 与 Ruby on Rails 3 一起使用吗 我从 MYSQL com 安装了 MySQL 但遇到了很多麻烦 所以我喜欢使用 MAMP XAMPP Mysql 有人这样做吗 另外
  • 正则表达式的 o 修饰符是什么意思?

    Ruby 正则表达式有一些选项 例如i x m o i例如 意味着忽略大小写 什么是o选项是什么意思 在ri Regexp 它说o意味着执行 仅插值一次 但是当我这样做时 a one b a a two b不改变 它保持 one 我缺少什么
  • 我可以让这个 Ruby 代码更快并且/或使用更少的内存吗?

    我有一个Array of StringRuby 中的对象由如下单词组成 animals cat horse dog cat dog bird dog sheep chicken cow 我想将其转换为另一个Array of String对象
  • Ruby 动态变量名

    有没有办法在 Ruby 中创建具有动态名称的变量 我正在读取一个文件 当我找到一个字符串时 会生成一个哈希值 e g file File new games log r file lines do l l split do p if p 1
  • sqlite3-ruby gem:无法构建 gem 本机扩展

    Update 看看这个后续问题 Windows 上的 Gem 更新 它坏了吗 https stackoverflow com questions 134581 gem update on windows is it broken 在 Win
  • 如何通过 Ruby 中的代理获取带有用户代理和超时的 URL?

    如果我需要通过某些方式获取 URL 我该如何获取 URLproxy 它必须有一个timeout最大 n 秒 和一个用户代理 require nokogiri require net http require rexml document d
  • 如何将文件的元素放入哈希中? -红宝石

    所以我有一个以下形式的文件 Key1 Value1 Key2 Value2 Key3 Value3 用制表符分隔 我的问题是如何打开这个文件并将其放入哈希中 我曾尝试这样做 fp File open file path fp each do
  • ruby 中 Array#uniq 方法的时间复杂度是多少?

    谁能告诉我 ruby 内部使用哪种算法来使用 ruby 数组删除重复项Array uniq method 来自docs http www ruby doc org core 1 9 3 Array html static VALUE rb
  • 通过 ruby​​ 进程共享变量

    我正在编写一个 gem 其中我必须分叉两个进程来启动两个 webrick 服务器 我想通过基类的类方法启动该服务器 因为应该只运行这两个服务器 而不是多个服务器 在运行时 我想调用这两台服务器上的一些方法来更改变量 我的问题是 我无法通过基
  • Rails 6:每个用户只能创建一个配置文件

    我目前正在开发 Rails 6 应用程序 我有以下关联 用户有一个配置文件 并且配置文件属于用户 当编辑用户的配置文件时 我最终为该用户提供了两个配置文件 我希望每个用户只有一份个人资料 编辑表单 profile edit html erb

随机推荐

  • 在 WebGL 上访问图像/纹理数据(纹素)

    我在 WebGL 上有以下代码片段 var texture gl createTexture texture image new Image texture image onload function I want to read the
  • 使用java反射获取包名称

    我想从一个单独的 Java 项目中获取所有包名称 在 Java 中如何最好使用反射来实现此操作 我已将项目导入到我的构建路径中 并尝试使用下面的代码来获取包名称 Package pack Package getPackages 编辑 我没有
  • 使用 Blogger API 获取的帖子数量限制(错误 400)

    我正在尝试使用 Blogger API 从博客中获取所有帖子 由于某些未知原因 要获取的最大帖子数似乎被限制为 20 个 如果我尝试这个网址 我收到以下回复 按预期列出最后 20 个帖子标题 items title El Caballero
  • 为什么 Bootstrap CSS 没有在其他项目中使用相同的代码覆盖?

    我有这样的问题 我正在处理项目 但是当我从服务器复制相同的文件时 它看起来有所不同 某些 Bootstrap 样式未被覆盖 这是工作站点标题的屏幕截图 以及在我的计算机上打开同一项目时看到的内容 我查看了 Firebug 发现该活动链接使用
  • UIPageViewController:pageViewController:spineLocationForInterfaceOrientation:未调用

    我的spineLocationFor InterfaceOrientation方法没有被调用 因此 脊柱总是在左边 但我想把它放在中间 我做错了什么 if UIPageViewController class self pageViewCo
  • 在CodeIgniter中检查update_batch()是否成功

    我正在 CodeIgniter 中的表上运行 update batch 我想检查它是否成功 我尝试过使用affected rows 但这只计算已修改的表单字段的数量 因此并不能完全减少它 this gt db gt update batch
  • 防止其他类实例化类

    我正在使用域 视图和控制器 每个都包含自己的类 该域包含许多不应在域外的类中实例化的类 我的印象是默认访问修饰符会对我有所帮助 使我的域类的构造函数包可见 事实证明 在导入正确的 package class 文件后 任何类仍然可以使用构造函
  • 如何让多边形填满屏幕宽度的 80%?

    我有一个简单的正方形 多边形 我希望它填充 80 屏幕宽度 换句话说 我想将正方形放置在 屏幕中央 但宽度为总宽度的80 屏幕的 我该怎么做 我找不到关于此的示例 教程 thanks 这是我的广场的代码 public class Squar
  • Fortran MPI 代码中的标准输出

    我有一个并行的 fortran 代码 其中我只希望rank 0进程能够写入标准输出 但我不想在代码中乱七八糟 if rank 0 write 所以我想知道这样做是否是一个好主意 或者是否有更好的方法 program test use mpi
  • 如何诊断 .NET Core 5 中的 CORS 问题?

    我遇到了 CORS 问题 如果我允许任何方法 任何来源和任何标头 一切都会正常工作 但当我限制其中任何一个时 浏览器控制台会立即变成红色 我已经解决了我的问题 这是由于环境变量不好 但这是一个相当乏味的试错过程 有没有办法诊断 NET Co
  • 如何使用第一个下拉列表中选定的值填充第二个下拉列表?

    假设我有两个下拉菜单 它们在我的 jsp 加载时填充
  • Java 文件下载挂起

    我有一个用于下载文件的网络界面 当请求到来时 我的 glassfish 服务器从 Web 服务流式传输文件 然后将内容写入输出流 我的代码工作正常 除非文件大小变得非常大 例如超过 200 MB 它会挂起 在浏览器中显示 0 下载 并且文件
  • 为什么在我的例子中字符串不相等?

    I have currencyFormatter那是与se SV locale var currencyFormatter NumberFormatter let formatter NumberFormatter formatter cu
  • 使用 webpack 和 bootstrap-loader 时 $(...).modal is not a function(...) 错误

    我在打开模态时遇到问题 modal id modal show 功能 在缩小问题范围后 我相信这与 webpack 加载我的依赖项或特别是 jQuery 依赖项有关 以下是我的 webpack 配置的必要部分 entry js bootst
  • Kafka Streams:如何使用 persistenceKeyValueStore 从磁盘重新加载现有消息?

    我的代码当前使用 InMemoryKeyValueStore 这避免了对磁盘或 kafka 的任何持久化 我想使用rocksdb Stores persistentKeyValueStore 以便应用程序将从磁盘重新加载状态 我正在尝试实现
  • 如何纠正 Damerau-Levenshtein 实施中的错误?

    我带着另一个较长的问题回来了 尝试过许多基于 Python 的 Damerau Levenshtein 编辑距离实现 我终于找到了下面列出的那个 as editdistance reference 它 似乎提供了正确的结果并且似乎有一个有效
  • 如何使用guard语句来检测赋值后的nil?

    我正在尝试使用 Guard 语句来检查是否为零 我很困惑为什么以下内容让它漏掉并生成 BAD EXEC 错误 guard let event Event eventsImagesLoading removeValueForKey locat
  • PDO_OCI - 进入 clob 字段

    我想在 Oracle DB 中插入一些 base64 编码的数据 每个字段最多 500 000 个字符 因为在我开始使用 PDO 并将字段设置为 CLOB 之前 我没有将 Oracle 与 PHP 一起使用 我的代码的简短版本 Db 类扩展
  • 在 Box2D 中制作漩涡

    我试图通过施加力在 C Objective C 上的 Box2D 中制作螺旋涡流 我想实现的是一个将物体从一个点推开或吸引它们的漩涡 我想我必须施加不止一种力量 我解决这个问题的切入点是 我想我必须施加三种力量 吸引或排斥身体中心的冲动 想
  • 将方法传递给迭代器方法时发生了什么

    众所周知 谁可以通过 a 将方法传递给迭代器方法 prefix 例如 a b map upcase gt A B def rettwo 2 end a b map rettwo gt 2 2 问题是 当我编写一个方法时 传递一个方法 前缀