类 YAML::DBM
YAML::DBM
提供与 ::DBM 相同的接口。
然而,虽然 DBM
仅允许字符串作为键和值,但此库允许使用大多数 Ruby 对象作为值,方法是先将它们转换为 YAML
。键必须是字符串。
转换为和从 YAML
的转换是自动执行的。
有关更多信息,请参阅 ::DBM 和 ::YAML
的文档。
公共实例方法
返回数据库中与 key
关联的值。
如果不存在这样的 key
,则返回 nil
。
有关更多信息,请参阅 fetch
。
# File lib/yaml/dbm.rb, line 29 def []( key ) fetch( key ) end
删除数据库中与 key
关联的值。
返回值或 nil
。
# File lib/yaml/dbm.rb, line 102 def delete( key ) v = super( key ) if String === v v = YAML.load( v ) end v end
对数据库中的每个 key
、value
对调用给定块一次。删除块返回 true 的所有条目。
返回 self
。
# File lib/yaml/dbm.rb, line 117 def delete_if # :yields: [key, value] del_keys = keys.dup del_keys.delete_if { |k| yield( k, fetch( k ) ) == false } del_keys.each { |k| delete( k ) } self end
对数据库中的每个 key
、value
对调用给定的代码块。
返回 self
。
# File lib/yaml/dbm.rb, line 140 def each_pair # :yields: [key, value] keys.each { |k| yield k, fetch( k ) } self end
对数据库中的每个值调用给定的代码块。
返回 self
。
# File lib/yaml/dbm.rb, line 151 def each_value # :yields: value super { |v| yield YAML.load( v ) } self end
返回与 key
关联的值。
如果 key
没有值,并且没有给出代码块,则返回 ifnone
。
否则,调用代码块,传入给定的 key
。
有关更多信息,请参见 ::DBM#fetch。
# File lib/yaml/dbm.rb, line 56 def fetch( keystr, ifnone = nil ) begin val = super( keystr ) return YAML.load( val ) if String === val rescue IndexError end if block_given? yield keystr else ifnone end end
如果在数据库中找到指定的 value
,则返回 true。
# File lib/yaml/dbm.rb, line 168 def has_value?( val ) each_value { |v| return true if v == val } return false end
已弃用,请改用 YAML::DBM#key
。
注意:YAML::DBM#index
会从 ::DBM#index 内部发出警告。它表示“DBM#index 已弃用;请使用 DBM#key
”,但 DBM#key
的行为与 DBM#index
不同。
# File lib/yaml/dbm.rb, line 76 def index( keystr ) super( keystr.to_yaml ) end
返回指定值的键。
# File lib/yaml/dbm.rb, line 84 def key( keystr ) invert[keystr] end
将数据库的内容转换为内存中的 Hash
,然后使用指定的代码块调用 Hash#reject
,返回一个新的 Hash
。
# File lib/yaml/dbm.rb, line 129 def reject hsh = self.to_hash hsh.reject { |k,v| yield k, v } end
如果提供了一个代码块,则返回一个新数组,其中包含代码块返回 true 的 [key, value] 对。
否则,与 values_at
相同。
# File lib/yaml/dbm.rb, line 219 def select( *keys ) if block_given? self.keys.collect { |k| v = self[k]; [k, v] if yield k, v }.compact else values_at( *keys ) end end
从数据库中删除一个 [key, value] 对,并返回它。如果数据库为空,则返回 nil
。
删除/返回值的顺序不保证。
# File lib/yaml/dbm.rb, line 205 def shift a = super a[1] = YAML.load( a[1] ) if a a end
将 value
存储在数据库中,使用 key
作为索引。value
在存储之前会转换为 YAML
。
返回 value
。
# File lib/yaml/dbm.rb, line 234 def store( key, val ) super( key, val.to_yaml ) val end
将数据库的内容转换为一个 [key, value] 数组的数组,并返回它。
# File lib/yaml/dbm.rb, line 259 def to_a a = [] keys.each { |k| a.push [ k, self.fetch( k ) ] } a end
将数据库的内容转换为一个内存中的 Hash
对象,并返回它。
# File lib/yaml/dbm.rb, line 271 def to_hash h = {} keys.each { |k| h[ k ] = self.fetch( k ) } h end
返回数据库中的值数组。
# File lib/yaml/dbm.rb, line 160 def values super.collect { |v| YAML.load( v ) } end
返回一个包含与给定键关联的值的数组。
# File lib/yaml/dbm.rb, line 92 def values_at( *keys ) keys.collect { |k| fetch( k ) } end