class YAML::DBM
YAML::DBM 提供了与 ::DBM 相同的接口。
然而,虽然 DBM 只允许键和值都为字符串,但此库允许通过先将大多数 Ruby 对象转换为 YAML 来使用它们作为值。键必须是字符串。
与 YAML 的相互转换是自动执行的。
有关更多信息,请参阅 ::DBM 和 ::YAML 的文档。
Public Instance Methods
Source
# File lib/yaml/dbm.rb, line 32 def []( key ) fetch( key ) end
Source
# File lib/yaml/dbm.rb, line 44 def []=( key, val ) store( key, val ) end
Source
# File lib/yaml/dbm.rb, line 111 def delete( key ) v = super( key ) if String === v if YAML.respond_to?(:safe_load) v = YAML.safe_load( v ) else v = YAML.load( v ) end end v end
从数据库中删除与 key 相关联的值。
返回值为 value 或 nil。
Source
# File lib/yaml/dbm.rb, line 130 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 对调用一次给定的块。删除块返回 true 的所有条目。
返回 self。
Source
# File lib/yaml/dbm.rb, line 153 def each_pair # :yields: [key, value] keys.each { |k| yield k, fetch( k ) } self end
对数据库中的每个 key、value 对调用一次给定的块。
返回 self。
Source
# File lib/yaml/dbm.rb, line 164 def each_value # :yields: value super { |v| yield YAML.respond_to?(:safe_load) ? YAML.safe_load( v ) : YAML.load( v ) } self end
为数据库中的每个值调用给定的块。
返回 self。
Source
# File lib/yaml/dbm.rb, line 59 def fetch( keystr, ifnone = nil ) begin val = super( keystr ) if String === val if YAML.respond_to?(:safe_load) return YAML.safe_load( val ) else return YAML.load( val ) end end rescue IndexError end if block_given? yield keystr else ifnone end end
返回与 key 相关联的值。
如果 key 没有值且未给出块,则返回 ifnone。
否则,将给定的 key 传递给块进行调用。
有关更多信息,请参阅 ::DBM#fetch。
Source
# File lib/yaml/dbm.rb, line 181 def has_value?( val ) each_value { |v| return true if v == val } return false end
如果数据库中找到指定的 value,则返回 true。
Source
# File lib/yaml/dbm.rb, line 85 def index( keystr ) super( keystr.to_yaml ) end
已弃用,请改用 YAML::DBM#key。
注意: YAML::DBM#index 会发出 ::DBM#index 内部的警告。它显示“DBM#index 已弃用;请使用 DBM#key”,但 DBM#key 的行为与 DBM#index 不同。
Source
# File lib/yaml/dbm.rb, line 194 def invert h = {} keys.each { |k| h[ self.fetch( k ) ] = k } h end
Source
# File lib/yaml/dbm.rb, line 93 def key( keystr ) invert[keystr] end
返回指定值的键。
Source
# File lib/yaml/dbm.rb, line 142 def reject hsh = self.to_hash hsh.reject { |k,v| yield k, v } end
将数据库的内容转换为内存中的 Hash,然后使用指定的代码块调用 Hash#reject,返回一个新的 Hash。
Source
# File lib/yaml/dbm.rb, line 206 def replace( hsh ) clear update( hsh ) end
Source
# File lib/yaml/dbm.rb, line 234 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] 对的新数组,其中块返回 true。
否则,与 values_at 相同。
Source
# File lib/yaml/dbm.rb, line 218 def shift a = super if a a[1] = YAML.respond_to?(:safe_load) ? YAML.safe_load( a[1] ) : YAML.load( a[1] ) end a end
从数据库中移除一个 [key, value] 对并返回它。如果数据库为空,则返回 nil。
移除/返回值的顺序不保证。
Source
# File lib/yaml/dbm.rb, line 249 def store( key, val ) super( key, val.to_yaml ) val end
Source
# File lib/yaml/dbm.rb, line 274 def to_a a = [] keys.each { |k| a.push [ k, self.fetch( k ) ] } a end
将数据库的内容转换为 [key, value] 数组,并返回它。
Source
# File lib/yaml/dbm.rb, line 286 def to_hash h = {} keys.each { |k| h[ k ] = self.fetch( k ) } h end
将数据库的内容转换为内存中的 Hash 对象,并返回它。
Source
# File lib/yaml/dbm.rb, line 262 def update( hsh ) hsh.each_pair do |k,v| self.store( k, v ) end self end
Source
# File lib/yaml/dbm.rb, line 173 def values super.collect { |v| YAML.respond_to?(:safe_load) ? YAML.safe_load( v ) : YAML.load( v ) } end
返回数据库中的值数组。
Source
# File lib/yaml/dbm.rb, line 101 def values_at( *keys ) keys.collect { |k| fetch( k ) } end
返回一个包含与给定键关联的值的数组。