Ruby 词法结构
最后修改于 2023 年 10 月 18 日
计算机语言,就像人类语言一样,具有词法结构。 Ruby 程序的源代码由标记组成。 标记是原子代码元素。 在 Ruby 语言中,我们有各种词法结构,例如注释、变量、字面量、空格、运算符、分隔符和关键字。
Ruby 注释
注释 由人类用来阐明源代码。 Ruby 中有两种类型的注释。 单行和多行注释。 单行注释以 #
字符开头。 多行注释放在 =begin
和 =end
标记之间。
#!/usr/bin/ruby =begin comments.rb author Jan Bodnar =end # prints message to the terminal puts "Comments example"
一个显示两种类型注释的例子。 Ruby 解释器会忽略注释。
=begin comments.rb author Jan Bodnar =end
这是一个多行注释的例子。 这两个标记必须从行的开头开始。
Ruby 空格
Ruby 中的空格用于分隔标记并终止源文件中的语句。 它也用于提高源代码的可读性。
if true then puts "A message" end
在某些地方需要空格。 例如,在 if
关键字和 true
关键字之间。 或者在 puts
方法和实际字符串之间。 在其他地方,这是被禁止的。 它不能出现在变量标识符或语言关键字中。
a=1 b = 2 c = 3
在标记之间放置的空格量与 Ruby 解释器无关。 但是,在整个项目中拥有一个样式很重要。
#!/usr/bin/ruby x = 5 + 3 puts x x = 5 + 3 puts x x = 5 + 3 puts x
换行符,一种空格形式,可用于终止语句。
x = 5 + 3
在第一种情况下,我们有一个语句。 加法的总和被赋给 x
变量。 变量的值是 8。
x = 5 + 3
现在,有两个语句。 第一个语句以换行符结尾。 x
变量是 5。 还有另一个语句,+3,它没有任何效果。
x = 5 + 3
最后,我们有一个语句。 换行符前有一个 + 二元运算符,因此解释器期望另一个值。 它在第二行查找。 在这种情况下,它将两行视为一个语句。 x
变量是 8。
$ ./whitespace.rb 8 5 8
Ruby 变量
一个 变量 是一个标识符,它保存一个值。 在编程中,我们说我们将一个值赋给一个变量。 从技术上讲,变量是对计算机内存的引用,其中存储了该值。 在 Ruby 中,变量可以保存字符串、数字或各种对象。 变量可以随时间被赋予不同的值。
Ruby 中的变量名由字母数字字符和下划线 (_) 字符创建。 变量不能以数字开头。 解释器可以更容易地区分文字数字和变量。 变量名不能以大写字母开头。 如果标识符以大写字母开头,则在 Ruby 中将其视为常量。
Value value2 company_name
这些是有效的变量名。
12Val exx$ first-name
这些是无效的变量名示例。
变量名前面可以有两个特殊字符 $
和 @
。 它们用于创建特定的变量范围。
变量是 区分大小写 的。 这意味着 price
和 pRice
是两个不同的标识符。
#!/usr/bin/ruby number = 10 numBER = 11 puts number, numBER
在我们的脚本中,我们将两个数值分配给两个标识符。 number
和 numBER
是两个不同的变量。 然而,这种做法是不鼓励的。 变量的名称不应具有误导性。
$ ./case.rb 10 11
Ruby 常量
常量是值持有者,它们随时间仅持有一个值。 第一个大写字母开头的标识符是 Ruby 中的常量。 在编程中,将常量的所有字符写成大写字母是一种惯例。
与其他语言不同,Ruby 不强制常量随时间只有一个值。 如果我们将新值分配给现有常量,解释器只会发出警告。
#!/usr/bin/ruby Name = "Robert" AGE = 23 Name = "Juliet"
在上面的例子中,我们创建了两个常量。 其中一个常量稍后被重新定义。
Name = "Robert" AGE = 23
创建了两个常量。 当标识符的名称以大写字母开头时,我们就在 Ruby 中拥有一个常量。 按照惯例,常量通常用大写字母书写。
Name = "Juliet"
我们重新定义了一个常量。 这会发出警告。
$ ./constants.rb ./constants.rb:6: warning: already initialized constant Name ./constants.rb:3: warning: previous definition of Name was here
运行示例。
Ruby 字面量
字面量是特定类型的特定值的文本表示。 字面量类型包括布尔值、整数、浮点数、字符串、字符和日期。 从技术上讲,字面量将在编译时被赋值,而变量将在运行时被赋值。
age = 29 nationality = "Hungarian"
在这里,我们将两个字面量分配给变量。 数字 29 和字符串“Hungarian”是字面量。
#!/usr/bin/ruby require 'date' sng = true name = "James" job = nil weight = 68.5 born = Date.parse("November 12, 1986") puts "His name is #{name}" if sng == true puts "He is single" else puts "He is in a relationship" end puts "His job is #{job}" puts "He weighs #{weight} kilograms" puts "He was born in #{born}"
在上面的例子中,我们有多个字面量。 布尔字面量可以具有值 true 或 false。 James 是一个字符串字面量。 nil 是一个值的缺失。 68.5 是一个浮点字面量。 最后,1987 年 11 月 12 日是一个日期字面量。
$ ./literals.rb His name is James He is single His job is He weighs 68.5 kilograms He was born in 1986-11-12
Ruby 代码块
Ruby 语句通常组织成代码块。 可以使用 { }
字符或 do
和 end
关键字来分隔代码块。
#!/usr/bin/ruby puts [2, -1, -4, 0].delete_if { |x| x < 0 } [1, 2, 3].each do |e| puts e end
在这个例子中,我们展示了两个代码块。
Ruby 代码的流程控制通常使用 if
关键字完成。 关键字后面是一个代码块。 在这种情况下,一个代码块由 then
、end
关键字分隔,其中第一个关键字是可选的。
#!/usr/bin/ruby if true then puts "Ruby language" puts "Ruby script" end
在上面的例子中,我们有一个简单的代码块。 它有两个语句。 该块由 then
、end
关键字分隔。 可以省略 then
关键字。
Ruby 符
符 $, @
是特殊字符,表示变量中的作用域。 $
用于全局变量,@
用于实例变量,@@
用于类变量。
$car_name = "Peugeot" @sea_name = "Black sea" @@species = "Cat"
符始终放置在变量标识符的开头。
Ruby 运算符
一个 运算符 是一个用于对某个值执行操作的符号。(answers.com)
! + - ~ * ** / % << >> & | ^ == === != <=> >= > < <= = %= /= -= += *= **= .. ... not and or ?: && ||
这是 Ruby 语言中可用运算符的列表。 我们稍后会在教程中讨论运算符。
Ruby 分隔符
一个 分隔符 是一系列一个或多个字符,用于指定纯文本或其他数据流中单独、独立区域之间的边界。(wikipedia)
( ) [ ] { } , ; ' " | |
#!/usr/bin/ruby name = "Jane" occupation = 'Student' numbers = [ 2, 3, 5, 3, 6, 2 ] puts name; puts occupation puts numbers[2] numbers.each { |i| puts i } puts ( 2 + 3 ) * 5
在上面的例子中,我们展示了各种 Ruby 分隔符的用法。
name = "Jane" occupation = 'Student'
单引号和双引号用于分隔 Ruby 中的字符串。
numbers = [ 2, 3, 5, 3, 6, 2 ]
方括号用于设置数组的边界。 逗号用于分隔数组中的项目。
puts name; puts occupation
分号在 Ruby 中用于分隔 Ruby 源代码中的两个语句。
puts numbers[2]
分隔符可以在不同的上下文中被使用。 这里,方括号用于访问数组中的一个项目。
numbers.each { |i| puts i }
花括号用于定义一个代码块。 管道用于定义一个元素,该元素在每个循环周期中填充当前数组项。
puts ( 2 + 3 ) * 5
圆括号可用于改变表达式的求值。
Ruby 关键字
关键字是 Ruby 编程语言中的保留字。 关键字用于在计算机程序中执行特定任务。 例如,将一个值打印到控制台,执行重复任务或执行逻辑运算。 程序员不能将关键字用作普通变量。
alias and BEGIN begin break case class def defined? do else elsif END end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield
这是 Ruby 关键字的列表。
这是 Ruby 词法结构。