基础
在这一章我们将覆盖Ruby语言的基本程序概念。我们展示一些非常基础的程序,使用到了变量、常量和基本的数据类型。从终端读取、写入内容;我们将会介绍变量的插值(interpolation)。
我们从一个非常简单的代码例子开始。
#!/usr/bin/ruby
puts “This is Ruby”
这个简单的脚本会在终端打印“This is Ruby”信息。
#!/usr/bin/ruby
这用于执行这个脚本的Ruby解释器的路径。
puts “This is Ruby”
puts是Ruby的关键字,用于将它的参数打印到终端上。在这个例子中它的参数是一个被双引号分隔的字符串。
$ ./first.rb
This is Ruby
以上是这个例子的输出结果。
我们可以从终端读取值。
#!/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}”
在这行代码我们展示变量的插值。变量插值(Variable interpolation)是将字符串字面量中的变量替换成它真实的值。变量插值(interpolation)的其他说法是:变量置换和变量扩展。
$ ./name.rb
What is your name? Jan
Hello Jan
以上是第二个程序的输出结果。
Ruby代码可以从命令行运行。这个是借鉴至Perl的单行方式,小块代码执行小任务。
$ ruby -e “puts RUBY_VERSION”
2.0.0
-e参数告诉Ruby要执行的代码从命令行中给定,而不是Ruby代码文件。我们例子将在终端输出Ruby解释器的版本号。
译注:原文的作者使用的是ruby 1.9.3,而如今ruby最新版已经是2.0.0了。
Ruby解释器有一个-c选项用于检查代码的语法。如果启用了的话,代码将不会被执行。如果代码没有语法错误,那么将会打印“Syntax OK”。
#!/usr/bin/ruby
class Being end
m = Test.new
p m
以上例子中有一个语法错误。如果我们将class和end关键字放在同一行,那么我们就必须还要使用分号字符(;)。
$ 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程序可以从命令行接收参数。当我们执行程序时参数接在程序名的后面。
#!/usr/bin/ruby
puts ARGV
接在文件名后面的有效命令行参数被Ruby程序保存在全局数组ARGV中。
这里我们将所有的命令行参数打印到终端上。
$ ./args.rb 1 2 3
1
2
3
我们提供了三个数字作为命令行参数,并且它们都打印到终端上了。
在下面的例子中我们将打印所有的参数还有脚本名。
#!/usr/bin/ruby
puts $0
puts $
$0是全局变量,包含被执行的脚本的名称。在Ruby中全局变量是以$字符开头。$是另一个全局变量。它与ARGV是相等的,包含了命令行的所有参数。
$ ./args2.rb Ruby Python Perl
./args2.rb
Ruby
Python
Perl
args2.rb脚本接收了三个参数。脚本名和这三个参数都打印到终端上了。
变量和常量
变量是保存数据的地址。变量包括名称和数据类型。数据类型表示了数据的不同类型。整数、字符串和浮点数都是数据类型。Ruby是一门动态语言,这意味着我们不需要(也不能)定义一个变量的确定类型。而是Ruby解释器在分配变量时决定它的数据类型。此外,在程序运行时一个变量还可以包含不同类型的不同值。这与Java、C或者Pascal之类的强类型语言不同。与变量不同,常量(应该)保持它的值。一旦初始化了就不能修改。然后在Ruby中是有可能修改常量的值,这种情况下会出现一个警告。
#!/usr/bin/ruby
city = “New York”
name = “Paul”; age = 35
nationality = “American”puts city
puts name
puts age
puts nationalitycity = “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没有对这个进行强制限制。
#!/usr/bin/ruby
WIDTH = 100
HEIGHT = 150var = 40
puts varvar = 50
puts varputs WIDTH
WIDTH = 110
puts WIDTH
在这个例子中定义了两个常量和一个变量。
WIDTH = 100
HEIGHT = 150
在Ruby中常量是以大写字母开头的。通常是将所有字母都大写。
var = 40
puts varvar = 50
定义并初始化一个变量。随后又给它分配了一个新的值,这是合法的。
WIDTH = 100
我们给常量分配了一个新的值。常量一旦创建就不应该改变,否则它就不意味着是一个常量。Ruby解释器将会给出一条警告。
$ ./constants.rb
40
50
100
./constants.rb:13: warning: already initialized constant WIDTH
110
以上是脚本的输出。
变量插值
变量插值(interpolation)是将字符串中的变量替换成它的值。变量插值的其他说法是:变量置换和变量扩展。
#!/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语言的一些基础。
原文地址: http://zetcode.com/lang/rubytutorial/basics/
翻译:龙昌 admin@longchangjin.cn
完整教程:https://github.com/wusuopu/Ruby-tutorial