[翻译]Ruby教程3——基础

基础

在这一章我们将覆盖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关键字是将参数打印到终端上。printputs的不同在于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



以上例子中有一个语法错误。如果我们将classend关键字放在同一行,那么我们就必须还要使用分号字符(;)。


$ 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 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没有对这个进行强制限制。



#!/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 = 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