gpt4 book ai didi

ruby - "with(&block)"在 Ruby 中是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:08 25 4
gpt4 key购买 nike

在我正在使用的 gem 中,我找到了代码片段:


@object.with(& block )

但是with(&block)方法在项目中没有定义。它看起来像是在 Ruby 的某个地方被定义为一个基本方法,但我不确定。

这是什么意思?有人可以指出该方法的定义位置(例如在 Object 或 Class 或其他 Ruby 类中)吗?

编辑:

有问题的代码:

  def self.redis(&block)
raise ArgumentError, "requires a block" if !block
@redis ||= Sidekiq::RedisConnection.create(@hash || {})
@redis.with(&block)
end

它来自 Sidekiq 项目 ( https://github.com/mperham/sidekiq )。该项目还包括 redis-rb gem ( https://github.com/redis/redis-rb )。我找不到在其中定义的 with 方法。

也许我只是错过了什么。

最佳答案

它被定义为 connection_pool gem 的一部分这是sidekiq使用的,它的来源如下。看起来它的目的是从池中获取连接,将其交给提供的 block ,然后将连接释放回池中。

我是这样发现的:

 pry> redis = Sidekiq::RedisConnection.create({})
pry> redis.method(:with).source

def with
conn = checkout
begin
yield conn
ensure
checkin
end
end

pry> redis.method(:with).source_location

["./ruby/gems/2.0.0/gems/connection_pool-1.1.0/lib/connection_pool.rb", 46]

并识别依赖关系:

~$ bundle exec gem dependency connection_pool --reverse-dependencies

Gem connection_pool-1.1.0
minitest (>= 5.0.0, development)
Used by
sidekiq-2.16.0 (connection_pool (>= 1.0.0))

关于ruby - "with(&block)"在 Ruby 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20126288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com