class Net::IMAP::SearchResult
由 Net::IMAP#search
返回的序列号数组,或由 Net::IMAP#uid_search
返回的唯一标识符数组。
为了向后兼容,SearchResult
继承自 Array。
属性
modseq[R]
修改序列号,如 [RFC7162 §3.1.6] 中 CONDSTORE
扩展所描述。
公共类方法
[](*seq_nums, modseq: nil) 点击切换源代码
返回一个使用给定 seq_nums
填充的 SearchResult
。
Net::IMAP::SearchResult[1, 3, 5, modseq: 9] # => Net::IMAP::SearchResult[1, 3, 5, modseq: 9]
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 16 def self.[](*seq_nums, modseq: nil) new(seq_nums, modseq: modseq) end
new(seq_nums, modseq: nil) 点击切换源代码
返回一个使用给定 seq_nums
填充的 SearchResult
。
Net::IMAP::SearchResult.new([1, 3, 5], modseq: 9) # => Net::IMAP::SearchResult[1, 3, 5, modseq: 9]
调用父类方法
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 29 def initialize(seq_nums, modseq: nil) super(seq_nums.to_ary.map { Integer _1 }) @modseq = Integer modseq if modseq end
公共实例方法
==(other) 点击切换源代码
返回 other
是否是具有相同值和相同 modseq
的 SearchResult
。数字的顺序无关紧要。
Net::IMAP::SearchResult[123, 456, modseq: 789] == Net::IMAP::SearchResult[123, 456, modseq: 789] # => true Net::IMAP::SearchResult[123, 456, modseq: 789] == Net::IMAP::SearchResult[456, 123, modseq: 789] # => true Net::IMAP::SearchResult[123, 456, modseq: 789] == Net::IMAP::SearchResult[987, 654, modseq: 789] # => false Net::IMAP::SearchResult[123, 456, modseq: 789] == Net::IMAP::SearchResult[1, 2, 3, modseq: 9999] # => false
如果 modseq
为 nil 且数组已排序,则可以直接将 SearchResult
与 Array 进行比较。
Net::IMAP::SearchResult[9, 8, 6, 4, 1] == [1, 4, 6, 8, 9] # => true Net::IMAP::SearchResult[3, 5, 7, modseq: 99] == [3, 5, 7] # => false
请注意,Array#== 需要匹配的顺序并忽略 modseq
。
[9, 8, 6, 4, 1] == Net::IMAP::SearchResult[1, 4, 6, 8, 9] # => false [3, 5, 7] == Net::IMAP::SearchResult[3, 5, 7, modseq: 99] # => true
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 62 def ==(other) (modseq ? other.is_a?(self.class) && modseq == other.modseq : other.is_a?(Array)) && size == other.size && sort == other.sort end
eql?(other) 点击切换源代码
哈希相等。与 ==
不同,会考虑顺序。
调用父类方法
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 77 def eql?(other) return super if modseq.nil? self.class == other.class && hash == other.hash end
hash() 点击切换源代码
哈希相等。与 ==
不同,会考虑顺序。
调用父类方法
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 71 def hash return super if modseq.nil? [super, self.class, modseq].hash end
inspect() 点击切换源代码
返回表示 SearchResult
的字符串。
Net::IMAP::SearchResult[123, 456, 789].inspect # => "[123, 456, 789]" Net::IMAP::SearchResult[543, 210, 678, modseq: 2048].inspect # => "Net::IMAP::SearchResult[543, 210, 678, modseq: 2048]"
调用父类方法
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 90 def inspect return super if modseq.nil? "%s[%s, modseq: %p]" % [self.class, join(", "), modseq] end
pretty_print(pp) 点击切换源代码
调用父类方法
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 123 def pretty_print(pp) return super if modseq.nil? pp.text self.class.name + "[" pp.group_sub do pp.nest(2) do pp.breakable "" each do |num| pp.pp num pp.text "," pp.fill_breakable end pp.breakable "" pp.text "modseq: " pp.pp modseq end pp.breakable "" pp.text "]" end end
to_s(type = "SEARCH") 点击切换源代码
返回一个符合正式 IMAP 语法的字符串。
data = Net::IMAP::SearchResult[2, 8, 32, 128, 256, 512] data.to_s # => "* SEARCH 2 8 32 128 256 512" data.to_s("SEARCH") # => "* SEARCH 2 8 32 128 256 512" data.to_s("SORT") # => "* SORT 2 8 32 128 256 512" data.to_s(nil) # => "2 8 32 128 256 512" data = Net::IMAP::SearchResult[1, 3, 16, 1024, modseq: 2048].to_s data.to_s # => "* SEARCH 1 3 16 1024 (MODSEQ 2048)" data.to_s("SORT") # => "* SORT 1 3 16 1024 (MODSEQ 2048)" data.to_s # => "1 3 16 1024 (MODSEQ 2048)"
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 108 def to_s(type = "SEARCH") str = +"" str << "* %s " % [type.to_str] unless type.nil? str << join(" ") str << " (MODSEQ %d)" % [modseq] if modseq -str end
to_sequence_set() 点击切换源代码
将 SearchResult
转换为 SequenceSet
。
Net::IMAP::SearchResult[9, 1, 2, 4, 10, 12, 3, modseq: 123_456] .to_sequence_set # => Net::IMAP::SequenceSet["1:4,9:10,12"]
# File net-imap-0.5.4/lib/net/imap/search_result.rb, line 121 def to_sequence_set; SequenceSet[*self] end