類別 YAML::DBM

YAML + DBM = YDBM

YAML::DBM 提供與 ::DBM 相同的介面。

然而,DBM 只允許字串作為鍵值和值,這個函式庫允許使用大多數 Ruby 物件作為值,方法是先將它們轉換為 YAML。鍵值必須是字串。

轉換到 YAML 和從 YAML 轉換會自動執行。

請參閱 ::DBM 和 ::YAML 的文件以取得更多資訊。

公開實例方法

ydbm[key] → value 按一下以切換來源

從資料庫傳回與 key 關聯的值。

如果沒有這樣的 key,會傳回 nil

請參閱 fetch 以取得更多資訊。

# File lib/yaml/dbm.rb, line 29
def []( key )
    fetch( key )
end
ydbm[key] = value 按一下以切換來源

Set key 到資料庫中的 value

儲存前,value 會轉換為 YAML

請參閱 store 以取得更多資訊。

# File lib/yaml/dbm.rb, line 41
def []=( key, val )
    store( key, val )
end
delete(key) 按一下以切換來源

從資料庫中刪除與 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
delete_if { |key, value| ... } 按一下以切換來源

針對資料庫中的每個 keyvalue 配對呼叫一次指定的區塊。刪除區塊傳回 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
each
別名:each_pair
each_pair { |key, value| ... } 按一下以切換來源

針對資料庫中的每個 keyvalue 成對呼叫指定的區塊。

傳回 self

# File lib/yaml/dbm.rb, line 140
def each_pair # :yields: [key, value]
    keys.each { |k| yield k, fetch( k ) }
    self
end
別名為:each
each_value { |value| ... } 按一下以切換來源

針對資料庫中的每個值呼叫指定的區塊。

傳回 self

呼叫超類別方法
# File lib/yaml/dbm.rb, line 151
def each_value # :yields: value
    super { |v| yield YAML.load( v ) }
    self
end
fetch( key, ifnone = nil ) 按一下以切換來源
fetch( key ) { |key| ... }

傳回與 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
has_value?(value) 按一下以切換來源

如果資料庫中找到指定的 value,則傳回 true。

# File lib/yaml/dbm.rb, line 168
def has_value?( val )
    each_value { |v| return true if v == val }
    return false
end
index( keystr ) 按一下以切換來源

已過時,請改用 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
invert → hash 按一下以切換來源

傳回一個 Hash(不是 DBM 資料庫),其建立方式是將資料庫中的每個值當作一個 key,並將對應的 key 當作其值。

請注意,雜湊中的所有值都會是字串,但 key 會是實際物件。

# File lib/yaml/dbm.rb, line 181
def invert
    h = {}
    keys.each { |k| h[ self.fetch( k ) ] = k }
    h
end
key(value) → string 按一下以切換來源

傳回指定值的 key。

# File lib/yaml/dbm.rb, line 84
def key( keystr )
    invert[keystr]
end
reject { |key, value| ... } 按一下以切換來源

將資料庫的內容轉換為記憶體中的 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
replace(hash) → ydbm 按一下以切換來源

使用指定物件的內容取代資料庫的內容。接受任何實作 each_pair 方法的物件,包括 HashDBM 物件。

# File lib/yaml/dbm.rb, line 193
def replace( hsh )
    clear
    update( hsh )
end
select { |key, value| ... } 按一下以切換來源
select(*keys)

如果提供區塊,則傳回一個新的陣列,其中包含區塊傳回 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
shift → [key, value] 按一下以切換來源

從資料庫中移除一個 [key, value] 成對,並傳回它。如果資料庫為空,則傳回 nil

移除/傳回值的順序並非保證。

呼叫超類別方法
# File lib/yaml/dbm.rb, line 205
def shift
    a = super
    a[1] = YAML.load( a[1] ) if a
    a
end
store(key, value) → value 按一下以切換來源

使用 key 作為索引,將 value 儲存在資料庫中。在儲存之前,value 會轉換成 YAML

傳回 value

呼叫超類別方法
# File lib/yaml/dbm.rb, line 234
def store( key, val )
    super( key, val.to_yaml )
    val
end
to_a → array 按一下以切換來源

將資料庫的內容轉換成 [key, value] 陣列的陣列,並傳回。

# File lib/yaml/dbm.rb, line 259
def to_a
    a = []
    keys.each { |k| a.push [ k, self.fetch( k ) ] }
    a
end
to_hash → hash 按一下以切換來源

將資料庫的內容轉換成內建記憶體 Hash 物件,並傳回。

# File lib/yaml/dbm.rb, line 271
def to_hash
    h = {}
    keys.each { |k| h[ k ] = self.fetch( k ) }
    h
end
update(hash) → ydbm 按一下以切換來源

使用指定物件的許多值來更新資料庫。採用任何實作 each_pair 方法的物件,包括 HashDBM 物件。

傳回 self

# File lib/yaml/dbm.rb, line 247
def update( hsh )
    hsh.each_pair do |k,v|
        self.store( k, v )
    end
    self
end
values 按一下以切換來源

傳回資料庫中的值陣列。

呼叫超類別方法
# File lib/yaml/dbm.rb, line 160
def values
    super.collect { |v| YAML.load( v ) }
end
values_at(*keys) 按一下以切換來源

傳回包含與給定金鑰相關聯的值的陣列。

# File lib/yaml/dbm.rb, line 92
def values_at( *keys )
    keys.collect { |k| fetch( k ) }
end