YAML::DBM
class YAML::DBM
Parent:DBM
YAML + DBM = YDBM
YAML :: DBM 提供与:: DBM 相同的接口。
然而,虽然 DBM 只允许键和值的字符串,但是该库允许使用大多数 Ruby 对象来获取值,方法是首先将它们转换为 YAML。钥匙必须是字符串。
自动转换到 YAML 和从 YAML 转换。
有关更多信息,请参阅:: DBM 和:: YAML 的文档。
公共实例方法
ydbmkey → value Show source
返回key
从数据库关联的值。
如果没有这样的key
返回nil
。
请参阅提取以获取更多信息。
# File lib/yaml/dbm.rb, line 28
def []( key )
fetch( key )
end
ydbmkey = value Show source
设置key
到value
数据库中。
value
将在存储之前转换为 YAML。
请参阅商店了解更多信息。
# File lib/yaml/dbm.rb, line 40
def []=( key, val )
store( key, val )
end
delete(key) Show source
从与之关联的数据库中删除值key
。
返回值或nil
。
调用超类方法 #delete
# File lib/yaml/dbm.rb, line 101
def delete( key )
v = super( key )
if String === v
v = YAML.load( v )
end
v
end
delete_if { |key, value| ... } Show source
调用给定块每进行一次key
,value
一对数据库。删除块返回 true 的所有条目。
返回self
。
# File lib/yaml/dbm.rb, line 116
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
each()
别名为: each_pair
each_pair { |key, value| ... } Show source
调用给定块每进行一次key
,value
一对数据库。
返回self
。
# File lib/yaml/dbm.rb, line 139
def each_pair # :yields: [key, value]
keys.each { |k| yield k, fetch( k ) }
self
end
还有别名:每个
each_value { |value| ... } Show source
为数据库中的每个值调用给定的块。
返回self
。
调用超类方法 #each_value
# File lib/yaml/dbm.rb, line 150
def each_value # :yields: value
super { |v| yield YAML.load( v ) }
self
end
fetch( key, ifnone = nil ) Show source
fetch( key ) { |key| ... }
返回值与key
。
如果没有key
给定值并且没有给出块,则返回ifnone
。
否则,调用阻止传递给定key
。
请参阅 DBM#获取更多信息。
调用超类方法 #fetch
# File lib/yaml/dbm.rb, line 55
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
has_value?(value) Show source
如果value
在数据库中找到指定,则返回 true 。
# File lib/yaml/dbm.rb, line 167
def has_value?( val )
each_value { |v| return true if v == val }
return false
end
index( keystr ) Show source
弃用,改用 #key。
注意:#index 会从 :: DBM# 索引的内部发出警告。它说 ' DBM#索引已被弃用; 使用 #key',但 #key 的行为与 #index 不同。
调用超类方法
# File lib/yaml/dbm.rb, line 75
def index( keystr )
super( keystr.to_yaml )
end
invert → hash Show source
通过使用数据库中的每个值作为关键字创建一个哈希(不是 DBM 数据库),并将相应的键用作其值。
请注意,散列中的所有值都是字符串,但这些键将是实际的对象。
# File lib/yaml/dbm.rb, line 180
def invert
h = {}
keys.each { |k| h[ self.fetch( k ) ] = k }
h
end
key(value) → string Show source
返回指定值的键。
# File lib/yaml/dbm.rb, line 83
def key( keystr )
invert[keystr]
end
reject { |key, value| ... } Show source
将数据库的内容转换为内存中的哈希,然后使用指定的代码块调用哈希#拒绝,返回一个新的哈希。
# File lib/yaml/dbm.rb, line 128
def reject
hsh = self.to_hash
hsh.reject { |k,v| yield k, v }
end
replace(hash) → ydbm Show source
用指定对象的内容替换数据库的内容。接受实现#each_pair 方法的任何对象,包括 Hash 和 DBM 对象。
# File lib/yaml/dbm.rb, line 192
def replace( hsh )
clear
update( hsh )
end
select { |key, value| ... } Show source
select(*keys)
如果提供了一个块,则返回一个包含键值对的新数组,该块返回 true。
否则,与 values_at 相同
# File lib/yaml/dbm.rb, line 218
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
shift → key, value()
从数据库中删除一个键值对,并返回它。如果数据库为空,则返回nil
。
无法保证值的排除/返回顺序。
调用超类方法 #shift
# File lib/yaml/dbm.rb, line 204
def shift
a = super
a[1] = YAML.load( a[1] ) if a
a
end
store(key, value) → value Show source
value
以数据库存储key
为索引。value
在被存储之前被转换为 YAML。
返回 value
调用超类方法#store
# File lib/yaml/dbm.rb, line 233
def store( key, val )
super( key, val.to_yaml )
val
end
to_a → array Show source
将数据库的内容转换为一个包含键值数组的数组,并将其返回。
# File lib/yaml/dbm.rb, line 258
def to_a
a = []
keys.each { |k| a.push [ k, self.fetch( k ) ] }
a
end
to_hash → hash Show source
将数据库的内容转换为内存中的哈希对象,并将其返回。
# File lib/yaml/dbm.rb, line 270
def to_hash
h = {}
keys.each { |k| h[ k ] = self.fetch( k ) }
h
end
update(hash) → ydbm Show source
使用指定对象的多个值更新数据库。接受实现#each_pair 方法的任何对象,包括 Hash 和 DBM 对象。
返回self
。
# File lib/yaml/dbm.rb, line 246
def update( hsh )
hsh.each_pair do |k,v|
self.store( k, v )
end
self
end
值显示源
返回数据库中的值数组。
调用超类方法 #values
# File lib/yaml/dbm.rb, line 159
def values
super.collect { |v| YAML.load( v ) }
end
values_at(*keys) Show source
返回包含与给定键相关的值的数组。
# File lib/yaml/dbm.rb, line 91
def values_at( *keys )
keys.collect { |k| fetch( k ) }
end