Ruby 2.4

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

设置keyvalue数据库中。

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

调用给定块每进行一次keyvalue一对数据库。删除块返回 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

调用给定块每进行一次keyvalue一对数据库。

返回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