我无法使用valid_transaction
返回的Proc作为选择过滤器中的参数,任何想法为什么?在没有类的情况下编写方法时,我能够做到这一点。
require 'json'
module Electrum
class History
def self.valid_transaction
lambda { |tx| tx["date"] == "----" }
end
def self.list
JSON::parse `electrum history`
end
def self.confirmed
list.reject { |tx| tx["date"] == "----" }
end
def self.unconfirmed
list.select(&:valid_transaction)
end
end
end
答案 0 :(得分:5)
您需要删除冒号:
list.select(&valid_transaction)
&语法用于将lambda或proc传递给期望块的方法。这就是你需要的。
使用冒号,效果有所不同:
list.select(&:valid_transaction)
相当于:
list.select { |tx| tx.valid_transaction }
这根本不是你想要的。
冒号有这种影响的原因是Ruby在&
参数上调用#to_proc。符号(即:valid_transaction
是)通过创建调用符号命名的方法的proc来响应#to_proc。