Proc 的 Ruby 比较操作?

标签 ruby

比较运算符概述here (如下所示)在 ruby​​ 2.2.0 上实际上只是 Proc#call 结果与另一个对象的比较。文档内容如下:

proc === obj → result_of_proc

Invokes the block with obj as the proc's parameter like #call. It is to allow a proc object to be a target of when clause in a case statement.

我正在寻找的是:

a = Proc.new { puts 'hi' }
b = Proc.new { puts 'hi' }

a == b
# => true

这能以某种方式完成吗?

尝试解决 this 上的缓存失效问题要点(代码如下所示)。如果已经有一个缓存文件,那么对 Kinescope block 的任何更改都将被忽略。

module Kinescope
  def self.film(reel,&block)
    file_name = "kinescoped_#{reel}.ml"
    begin
      Marshal.load(File.read(file_name))
    rescue
      data = yield
      File.open(file_name,'w') do |f|
        f.write(Marshal.dump(data))
      end
      data
    end
  end
end
 
def time_consuming_calculation
  sleep 60
  true
end
 
test = Kinescope.film :big_data do
  # 'film' gigantic data here
  result = []
  File.foreach('big_file.txt') do |line|
    result << line if time_consuming_calculation
  end
  result
end

最佳答案

这称为函数问题,相当于解决停机问题。想想看。如果这是可能的,那么您可以像这样解决停机问题:

infinite_loop = -> { nil while true }
some_program == infinite_loop # => true

因此,不可能通过算法确定两个程序是否计算相同的函数。

关于Proc 的 Ruby 比较操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31224671/

相关文章:

ruby - 如何复制 ruby 变量?

ruby - 如何在 Debian 6 上安装 ruby

sql - 将 UNION 与 Sequel 结合使用

ruby - 我的 Treetop 语法有什么问题?

ruby - 将字节数组转换为十六进制字符串

ruby - 使用 Minimagick 操作像素

ruby - 从 Ruby 打开 RSA 私钥

ruby - Hash#index 的替代品在 Ruby 1.8 和 1.9 中都可以无警告地工作

ruby - Ubuntu 10.04 上的 ruby​​gems 更新后 dev_appserver.rb 无法启动

ruby-on-rails - 只允许登录/当前用户编辑自己的帖子