# Ruby 基础

> 原文： [https://zetcode.com/lang/rubytutorial/basics/](https://zetcode.com/lang/rubytutorial/basics/)

在 Ruby 教程的这一部分中，我们将介绍 Ruby 语言的基本编程概念。 我们介绍非常基本的程序。 我们将使用变量，常量和基本数据类型。 我们将在控制台上读写； 我们将提到变量插值。

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

```ruby
#!/usr/bin/ruby

puts "This is Ruby"

```

这是简单的 Ruby 脚本。 它将向控制台输出“`This is Ruby`”消息。

```ruby
#!/usr/bin/ruby

```

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

```ruby
puts "This is Ruby"

```

`puts`是 Ruby 关键字，将其参数输出到终端。 在我们的例子中，参数是一个字符串消息，由双引号引起来。

```ruby
$ ./first.rb 
This is Ruby

```

执行脚本将得到以上输出。

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

```ruby
#!/usr/bin/ruby

print "What is your name? "
name = gets

puts "Hello #{name}"

```

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

```ruby
print "What is your name? "

```

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

```ruby
name = gets

```

在这里，我们从用户那里读取输入并将其存储在`name`变量中。 `gets`是一种方法，在我们的情况下是从终端读取一条线。 这是默认情况下我们可以使用的方法之一。

```ruby
puts "Hello #{name}"

```

在此代码行中，我们执行变量插值。 变量插值正在用字符串文字中的值替换变量。 变量插值的另一个名称是：变量替换和变量扩展。

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

```

这是第二个程序的输出。

Ruby 代码可以从命令行运行。 这是受 Perl 单一代码启发的，在该代码中运行一些小的代码片段来完成一些小的任务。

```ruby
$ ruby -e "puts RUBY_VERSION"
1.9.3

```

`-e`选项告诉 Ruby 执行该行上指定的 Ruby 代码，而不搜索 Ruby 文件名。 我们的示例将 Ruby 解释器的版本输出到终端。

Ruby 解释器具有`-c`选项，用于检查代码的语法。 如果使用此选项，则不执行代码。 如果没有语法错误，Ruby 将在标准输出中显示“语法正确”。

```ruby
#!/usr/bin/ruby

class Being end

m = Test.new
p m

```

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

```ruby
$ ruby -c syntax_check.rb 
syntax_check.rb:3: syntax error, unexpected keyword_end, expecting '<' or ';' or '\n'
syntax_check.rb:6: syntax error, unexpected $end, expecting keyword_end

```

发现语法错误。 如果我们在`Being`类后面加上分号，该错误消息将消失。

## Ruby 命令行参数

Ruby 程序可以接收命令行参数。 当我们运行程序时，它们会遵循程序的名称。

```ruby
#!/usr/bin/ruby

puts ARGV

```

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

```ruby
puts ARGV

```

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

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

```

我们提供了三个数字作为命令行参数，并将它们打印到控制台上。

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

```ruby
#!/usr/bin/ruby

puts $0
puts $*

```

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

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

```

`args2.rb`脚本接收三个字符串。 脚本的名称和三个参数将显示在终端上。

## Ruby 变量和常量

变量是存储数据的地方。 变量具有名称和数据类型。 数据类型是不同类型的值。 整数，字符串和浮点数是数据类型的示例。 Ruby 是一种动态语言。 这意味着我们不必（也不能）将变量声明为某种数据类型。 而是由 Ruby 解释器在分配时确定数据类型。

此外，变量可以随时间包含不同的值以及不同类型的值。 这不同于强类型的语言，例如 Java，C 或 Pascal。 与变量不同，常量（应）保留其值。 一旦初始化，便无法修改。 但是，在 Ruby 中，可以更改常量的值。 在这种情况下，会发出警告。

```ruby
#!/usr/bin/ruby

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

puts city
puts name
puts age
puts nationality

city = "London"

puts city

```

在上面的示例中，我们使用四个变量。

```ruby
city = "New York"

```

我们为城市变量分配一个字符串值。 该变量是动态创建的。

```ruby
name = "Paul"; age = 35

```

我们再创建两个变量。 我们可以将两个语句放在一行中。 但是，为了便于阅读，每个语句应放在单独的行上。

```ruby
puts city
puts name
puts age
puts nationality

```

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

```ruby
city = "London"

```

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

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

```

示例的输出。

常数正如我们已经说过的，常数在一段时间内存储一个值。 与其他语言不同，该规则不是在 Ruby 中强制执行的。

```ruby
#!/usr/bin/ruby

WIDTH = 100
HEIGHT = 150

var = 40
puts var

var = 50
puts var

puts WIDTH
WIDTH = 110
puts WIDTH

```

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

```ruby
WIDTH = 100
HEIGHT = 150

```

Ruby 中的常量以大写字母开头。 通常的做法是用大写字母写一个常量的所有字符。

```ruby
var = 40
puts var

var = 50

```

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

```ruby
WIDTH = 110

```

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

```ruby
$ ./constants.rb 
40
50
100
./constants.rb:13: warning: already initialized constant WIDTH
110

```

脚本的输出。

## Ruby 变量插值

变量插值正在用字符串文字中的值替换变量。 变量插值的其他名称是变量替换和变量扩展。

```ruby
#!/usr/bin/ruby

age = 34
name = "William"

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

```

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

```ruby
age = 34
name = "William"

```

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

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

```

字符串消息以双引号作为边界。 当我们在`#{`和`}`字符之间放置一个变量名时，将对该变量进行插值：即用其值替换。

```ruby
$ ./interpolation.rb 
William is 34 years old

```

这是输出。

本章介绍了 Ruby 语言的一些基础知识。