返回介绍

1.2 值

发布于 2023-05-18 19:12:04 字数 2704 浏览 0 评论 0 收藏 0

Ruby 是一种面向表达式的语言:每一段有效的代码执行之后都要产生一个值。下面快速浏览一下 Ruby 中不同类型的值。

1.2.1 基本数据

如我们所料,Ruby 支持布尔型(Boolean)、数值型(number)和字符串(string),且它们都支持常规运算:

>> (true && false) || true
=> true
>> (3 + 3) * (14 / 2)
=> 42
>> 'hello' + ' world'
=> "hello world"
>> 'hello world'.slice(6)
=> "w"

一个 Ruby 符号表示一个名字,是一个轻量级、不可变的值。作为字符串的简单化、非内存密集化(less memory-intensive)的替身,符号在 Ruby 中被广泛使用——通常是作为散列表中的键使用(参见 1.2.2 节)。符号字面量的开头会有一个冒号:

>> :my_symbol
=> :my_symbol
>> :my_symbol == :my_symbol
=> true
>> :my_symbol == :another_symbol
=> false

特殊值 nil 用来表示不存在任何有用的值:

>> 'hello world'.slice(11)
=> nil

1.2.2 数据结构

Ruby 的数组字面量是一串用逗号分隔的值外加方括号的形式:

>> numbers = ['zero', 'one', 'two']
=> ["zero", "one", "two"]
>> numbers[1]
=> "one"
>> numbers.push('three', 'four')
=> ["zero", "one", "two", "three", "four"]
>> numbers
=> ["zero", "one", "two", "three", "four"]
>> numbers.drop(2)
=> ["two", "three", "four"]

范围(range)表示最小值和最大值之间值的集合。范围的写法是在两个值之间加两个点:

>> ages = 18..30
=> 18..30
>> ages.entries
=> [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
>> ages.include?(25)
=> true
>> ages.include?(33)
=> false

一个散列(hash)表示一个集合,其中每个值都与一个键相关联;一些编程语言把这种数据结构叫作“映射”(map)、“字典”(dictionary)或者“关联数组”(associative array)。一个散列字面量写成大括号里用逗号分隔的“键 => 值”对的列表:

>> fruit = { 'a' => 'apple', 'b' => 'banana', 'c' => 'coconut' }
=> {"a"=>"apple", "b"=>"banana", "c"=>"coconut"}
>> fruit['b']
=> "banana"
>> fruit['d'] = 'date'
=> "date"
>> fruit
=> {"a"=>"apple", "b"=>"banana", "c"=>"coconut", "d"=>"date"}

散列经常将符号用作键,所以键作为符号时,Ruby 提供了另一种书写键值对的语法。这种写法比“键 => 值”的方式更为紧凑,而且看起来很像常用于 JavaScript 对象的 JSON 格式 :

>> dimensions = { width: 1000, height: 2250, depth: 250 }
=> {:width=>1000, :height=>2250, :depth=>250}
>> dimensions[:depth]
=> 250

1.2.3 proc

一个 proc 是一段未经求值的 Ruby 代码,根据需要进行传递和求值;其他语言把这种语言结构称为“匿名函数”或“lambda 函数”。proc 字面量有多种写法,其中最紧凑的一种是“-> 参数 { 函数体 }”语法:

>> multiply = -> x, y { x * y }
=> #<Proc (lambda)>
>> multiply.call(6, 9)
=> 54
>> multiply.call(2, 3)
=> 6

除了 .call 语法,还可以使用方括号调用 proc:

>> multiply[3, 4]
=> 12

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文