class Rinda::TupleEntry
TupleEntry
是一个 Tuple
(即 Tuplespace 中可能的条目),以及过期和取消数据。
属性
expires[RW]
公共类方法
new(ary, sec=nil) 点击切换源代码
基于 ary
创建一个 TupleEntry
,并可选择一个更新器或过期时间 sec
。
更新器必须实现 renew
方法,该方法返回一个数值、nil 或 true,以指示元组何时过期。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 26 def initialize(ary, sec=nil) @cancel = false @expires = nil @tuple = make_tuple(ary) @renewer = nil renew(sec) end
公共实例方法
[](key) 点击切换源代码
从元组中检索 key
。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 110 def [](key) @tuple[key] end
alive?() 点击切换源代码
当 TupleEntry
被取消或过期时,它就失效了。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 44 def alive? !canceled? && !expired? end
cancel() 点击切换源代码
将此 TupleEntry
标记为已取消。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 37 def cancel @cancel = true end
canceled?() 点击切换源代码
返回取消状态。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 57 def canceled?; @cancel; end
expired?() 点击切换源代码
这个元组是否已过期? (true/false)。
当基于初始化时的 sec
参数的过期计时器耗尽时,元组就会过期。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 65 def expired? return true unless @expires return false if @expires > Time.now return true if @renewer.nil? renew(@renewer) return true unless @expires return @expires < Time.now end
fetch(key) 点击切换源代码
从元组中获取 key
。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 117 def fetch(key) @tuple.fetch(key) end
make_expires(sec=nil) 点击切换源代码
根据 sec
返回一个过期 Time,它可以是以下之一:
- 数值型
-
未来
sec
秒 true
-
过期时间是 1970 年的开始 (即已过期)
nil
-
它是 2038 年 1 月 19 日 03:14:07 GMT 标准时间 (即 UNIX 时钟将死的时候)
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 96 def make_expires(sec=nil) case sec when Numeric Time.now + sec when true Time.at(1) when nil Time.at(2**31-1) end end
make_tuple(ary) 点击切换源代码
为 ary
创建一个 Rinda::Tuple
。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 131 def make_tuple(ary) Rinda::Tuple.new(ary) end
renew(sec_or_renewer) 点击切换源代码
根据 sec_or_renewer
重置过期时间。
nil
-
设置为在遥远的未来过期。
true
-
它已经过期了。
- 数值型
-
它将在那么多秒后过期。
否则,该参数指的是某种更新器对象,该对象将重置其过期时间。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 84 def renew(sec_or_renewer) sec, @renewer = get_renewer(sec_or_renewer) @expires = make_expires(sec) end
size() 点击切换源代码
元组的大小。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 124 def size @tuple.size end
value() 点击切换源代码
返回构成元组本身的对象:Array 或 Hash。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 52 def value; @tuple.value; end
私有实例方法
get_renewer(it) 点击切换源代码
返回一个有效的参数给 make_expires
以及更新器或 nil。
给定 true
、nil
或数值,返回该值和 nil
(没有实际的更新器)。否则,它将从调用 it.renew
和更新器中返回过期值。
# File rinda-0.2.0/lib/rinda/tuplespace.rb, line 144 def get_renewer(it) case it when Numeric, true, nil return it, nil else begin return it.renew, it rescue Exception return it, nil end end end