ruby - 如何避免调用两次产生 block 的方法?

标签 ruby

我正在调用第三方 API,它产生一个 block 并返回一个数组:

my.api.all arg: value do |ret|
  #block
end

我想以某种方式调用该方法来获取数组的大小:

array = my.api.all(arg: value)

if array.size > minValue
  #avoid calling all again, but how?
  my.api.all arg: value do |ret|
    #block
  end
end

然后我想避免再次调用该方法,但要执行生成的 block 中的代码。

这是否有可能,或者是否有任何方法可以避免两次调用 all 方法?

最佳答案

如何将 block 存储在字符串中并稍后对其进行eval

str = ""

array = my.api.all arg: value do |ret|
    str = <<-eos
        #code e.g.
        puts "block executed with arg: #{ret}"
    eos
  end

if array.size > minValue
  eval str
end

关于ruby - 如何避免调用两次产生 block 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19233756/

相关文章:

ruby-on-rails - 如何汇总Elasticsearch结果的提升点并对其进行排序?

ruby - Ruby 和 Perl 中的 Regex 语法有什么区别?

ruby - 从 ruby​​ 运行子进程而不等待它返回

ruby - 接下来是 String 类的奇怪行为! unicode 字符串上的方法

ruby - 我可以在 Ruby 3.1 中解构 block 参数中的散列,例如 `|foo:|` 吗?

Ruby Regex,获取所有可能的匹配项(不截断字符串)

ruby-on-rails - 在旧的 Rails 3-2-stable 应用程序中未加载某些 Assets

ruby-on-rails - 如何使 Rails 片段缓存超时?

ruby - bcrypt-ruby 不会与 bundler 一起安装,但与 gem install 一起工作正常

ruby-on-rails - Dotenv 多行变量