非常教程

Ruby 2.4参考手册

YAML

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
Ruby 2.4

Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言,是世界上最优美而巧妙的语言。

主页 https://www.ruby-lang.org/
源码 https://github.com/ruby/ruby
版本 2.4
发布版本 2.4.1

Ruby 2.4目录

1.缩略 | Abbrev
2.ARGF
3.数组 | Array
4.Base64
5.基本对象 | BasicObject
6.基准测试 | Benchmark
7.BigDecimal
8.绑定 | Binding
9.CGI
10.类 | Class
11.比较 | Comparable
12.负责 | Complex
13.计算续体 | Continuation
14.覆盖 | Coverage
15.CSV
16.日期 | Date
17.日期时间 | DateTime
18.DBM
19.代理 | Delegator
20.摘要 | Digest
21.Dir
22.DRb
23.编码 | Encoding
24.枚举 | Enumerable
25.枚举 | Enumerator
26.ENV
27.ERB
28.错误 | Errors
29.Etc
30.期望值 | Exception
31.错误类 | FalseClass
32.Fiber
33.Fiddle
34.文件 | File
35.文件实用程序 | FileUtils
36.查找 | Find
37.浮点 | Float
38.Forwardable
39.GC
40.GDBM
41.GetoptLong
42.Hash
43.Integer
44.IO
45.IPAddr
46.JSON
47.Kernel
48.语言 | 3Language
49.记录 | Logger
50.编排 | Marshal
51.MatchData
52.数学 | Math
53.矩阵 | Matrix
54.方法 | Method
55.模型 | Module
56.监控 | Monitor
57. 互斥 | Mutex
58.Net
59.Net::FTP
60.Net::HTTP
61.Net::IMAP
62.Net::SMTP
63.NilClass
64.数字 | Numeric
65.对象 | Object
66.ObjectSpace
67.Observable
68.Open3
69.OpenSSL
70.OpenStruct
71.OpenURI
72.OptionParser
73.路径名 | Pathname
74.完整输出 | PrettyPrint
75.Prime
76.Proc
77.过程 | Process
78.PStore
79.PTY
80.队列 | Queue
81.随机 | Random
82.范围 | Range
83.合理的 | Rational
84.Readline
85.Regexp
86.Resolv
87.Ripper
88.RubyVM
89.Scanf
90.SDBM
91.SecureRandom
92.Set
93.Shell
94.信号 | Signal
95.Singleton
96.套接字 | Socket
97.字符串 | String
98.StringIO
99.StringScanner
100.结构 | Struct