ZetCode

Ruby 基础

最后修改于 2023 年 10 月 18 日

在本 Ruby 教程中,我们将介绍 Ruby 语言的基本编程概念。我们介绍最基本的程序。我们使用变量、常量和基本数据类型。我们读写控制台;我们提到了变量插值。

我们从一个非常简单的代码示例开始。

first.rb
#!/usr/bin/ruby

puts "This is Ruby"

这是一个简单的 Ruby 脚本。它将打印 "This is Ruby" 消息到控制台。

#!/usr/bin/ruby

这是 Ruby 解释器的路径,它将执行脚本。

puts "This is Ruby"

puts 是一个 Ruby 关键字,它将其参数打印到终端。在我们的例子中,参数是一个字符串消息,用双引号分隔。

$ ./first.rb 
This is Ruby

执行脚本会给出上述输出。

我们可以从终端读取值。(终端和控制台是同义词)

name.rb
#!/usr/bin/ruby

print "What is your name? "
name = gets

puts "Hello #{name}"

第二个程序将从控制台读取一个值并将其打印出来。

print "What is your name? "

print 关键字将消息打印到控制台。print 和 puts 关键字的区别在于 print 关键字不会开始新的一行。puts 关键字会自动开始新的一行。

name = gets

在这里,我们从用户那里读取一个输入并将其存储在 name 变量中。gets 是一种方法,在我们的例子中,它从终端读取一行。它是我们默认可以使用的方法之一。

puts "Hello #{name}"

在这行代码中,我们执行变量插值。变量插值 是用它们的值替换字符串字面量中的变量。变量插值的另一个名称是:变量替换和变量展开。

$ ./name.rb 
What is your name? Jan
Hello Jan

Ruby 代码可以从命令行运行。这受到了 Perl 单行代码的启发,其中运行小段代码来完成一些小任务。

$ ruby -e "puts RUBY_VERSION"
2.7.1

-e 选项告诉 Ruby 执行在行中指定的 Ruby 代码,而不是搜索 Ruby 文件名。我们的例子将 Ruby 解释器的版本打印到终端。

Ruby 解释器有一个 -c 选项,它检查代码的语法。如果使用此选项,则不会执行代码。如果没有语法错误,Ruby 将在标准输出中打印 "Syntax OK"。

syntax_check.rb
#!/usr/bin/ruby

class Being end
    
m = Test.new
p m

在上面的例子中,存在语法错误。如果我们将 class 和 end 关键字放在一行上,我们还必须使用分号 ; 字符。

$ ruby -c syntax_check.rb 
Syntax OK

代码片段的语法是 OK 的。

Ruby 命令行参数

Ruby 程序可以接收命令行参数。它们在运行程序时跟随程序名称。

args.rb
#!/usr/bin/ruby

puts ARGV

在文件名之后指定的命令行参数在名为 ARGV 的全局数组中可用于 Ruby 程序。

puts ARGV

在这里,我们将所有命令行参数打印到终端。

$ ./args.rb 1 2 3
1
2
3

我们提供三个数字作为命令行参数,这些数字被打印到控制台。

在下面的例子中,我们打印所有参数以及脚本名称。

args2.rb
#!/usr/bin/ruby

puts $0
puts $*

$0 全局变量包含正在执行的脚本的名称。Ruby 中的全局变量以 $ 字符开头。$* 是另一个全局变量。它是 ARGV 变量的同义词。它包含为当前脚本给出的命令行参数。

$ ./args2.rb Ruby Python Perl
./args2.rb
Ruby
Python
Perl

args2.rb 脚本接收三个字符串。脚本的名称和三个参数将打印到终端。

Ruby 变量和常量

变量 是存储数据的地方。变量有一个名称和一个数据类型。数据类型是不同类型的值。整数、字符串和浮点数是数据类型的示例。Ruby 是一种动态语言。这意味着我们不必(也不能)声明一个变量具有特定的数据类型。相反,Ruby 解释器在赋值时确定数据类型。

此外,一个变量可以包含不同的值以及不同类型的值。这与强类型语言(如 Java、C 或 Pascal)不同。与变量不同,常量(应该)保留其值。一旦初始化,它们就不能被修改。然而,在 Ruby 中,可以更改常量的值。在这种情况下,会发出警告。

variables.rb
#!/usr/bin/ruby

city = "New York"
name = "Paul"; age = 35
nationality = "American"

puts city
puts name
puts age
puts nationality

city = "London"

puts city

在上面的例子中,我们使用了四个变量。

city = "New York"

我们将一个字符串值赋给 city 变量。变量是动态创建的。

name = "Paul"; age = 35

我们创建了另外两个变量。我们可以将两个语句放在一行中。但是,为了可读性,每个语句都应该放在单独的行上。

puts city
puts name
puts age
puts nationality

我们将变量的值打印到终端。

city = "London"

我们为 city 变量分配一个新值。

$ ./variables.rb 
New York
Paul
35
American
London

正如我们已经说过的那样,常量在一段时间内存储一个值。然而,与其他语言不同的是,Ruby 并没有强制执行此规则。

constants.rb
#!/usr/bin/ruby

WIDTH = 100
HEIGHT = 150

var = 40
puts var

var = 50
puts var

puts WIDTH
WIDTH = 110
puts WIDTH

在此示例中,我们声明两个常量和一个变量。

WIDTH = 100
HEIGHT = 150

Ruby 中的常量以大写字母开头。通常的做法是将常量的所有字符都写成大写字母。

var = 40
puts var

var = 50

我们声明并初始化一个变量。稍后,我们为变量分配一个新值。这是合法的。

WIDTH = 110

我们为常量分配一个新值。创建常量后不应修改常量。否则,创建常量就没有任何意义了。Ruby 解释器将发出警告。

$ ./constants.rb 
40
50
100
./constants.rb:13: warning: already initialized constant WIDTH
./constants.rb:3: warning: previous definition of WIDTH was here
110

Ruby 变量插值

变量插值 是用它们的值替换字符串字面量中的变量。变量插值的其他名称是变量替换和变量展开。

interpolation.rb
#!/usr/bin/ruby

age = 34
name = "William"

puts "#{name} is #{age} years old" 

在 Ruby 中,字符串是不可变的。我们不能修改现有的字符串。变量插值发生在字符串创建期间。

age = 34
name = "William"

在这里,我们声明了两个变量。

puts "#{name} is #{age} years old" 

字符串消息使用双引号作为其边界。当我们把变量名放在 #{} 字符之间时,变量会被插值:也就是说,会被替换为它的值。

$ ./interpolation.rb 
William is 34 years old

本章涵盖了 Ruby 语言的一些基础知识。