POSTS
第三章、ruby基础及变量插值
基础内容
在这一章我们将覆盖Ruby语言的基本程序概念。我们展示一些非常基础的程序,使用到了变量、常量和基本的数据类型。从终端读取、写入内容;我们将会介绍变量的插值(interpolation)。
1.从终端读取值
#!/usr/local/rvm/rubies/ruby-2.3.0/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)的其他说法是:变量置换和变量扩展。
➜ ~ ruby name.rb
What is your name? dingxu
Hello dingxu
以上是程序的输出结果。
2.ruby代码从命令行运行
Ruby代码可以从命令行运行。这个是借鉴至Perl的单行方式,小块代码执行小任务。
➜ ~ ruby -e "puts RUBY_VERSION"
2.3.0
-e参数告诉Ruby要执行的代码从命令行中给定,而不是Ruby代码文件。我们例子将在终端输出Ruby解释器的版本号。
Ruby解释器有一个-c选项用于检查代码的语法。如果启用了的话,代码将不会被执行。如果代码没有语法错误,那么将会打印”Syntax OK”。
#!/usr/local/rvm/rubies/ruby-2.3.0/bin/ruby
class Being
m = Being.new
p m
以上例子中有一个语法错误,缺少end关键字。
➜ ~ ruby -c syntax_check.rb
syntax_check.rb:4: syntax error, unexpected end-of-input, expecting keyword_end
发现了语法错误。如果我们在Being的后面加上end关键字,错误提示消息就会消失。
3.命令行参数
Ruby程序可以从命令行接收参数。当我们执行程序时参数接在程序名的后面。
#!/usr/local/rvm/rubies/ruby-2.3.0/bin/ruby
puts ARGV
接在文件名后面的有效命令行参数被Ruby程序保存在全局数组ARGV中。
这里我们将所有的命令行参数打印到终端上。
➜ ~ ruby args.rb 1 2 3
1
2
3
我们提供了三个数字作为命令行参数,并且它们都打印到终端上了。
在下面的例子中我们将打印所有的参数还有脚本名。
#!/usr/local/rvm/rubies/ruby-2.3.0/bin/ruby
puts $0
puts $*
$0是全局变量,包含被执行的脚本的名称。在Ruby中全局变量是以$字符开头。$*是另一个全局变量。它与ARGV是相等的,包含了命令行的所有参数。
➜ ~ ruby args.rb Ruby Python Perl
args.rb
Ruby
Python
Perl
args.rb脚本接收了三个参数。脚本名和这三个参数都打印到终端上了。
4.变量和常量
变量是保存数据的地址。变量包括名称和数据类型。数据类型表示了数据的不同类型。整数、字符串和浮点数都是数据类型。Ruby是一门动态语言,这意味着我们不需要(也不能)定义一个变量的确定类型。而是Ruby解释器在分配变量时决定它的数据类型。此外,在程序运行时一个变量还可以包含不同类型的不同值。这与Java、C或者Pascal之类的强类型语言不同。与变量不同,常量(应该)保持它的值。一旦初始化了就不能修改。然后在Ruby中是有可能修改常量的值,这种情况下会出现一个警告。
#!/usr/local/rvm/rubies/ruby-2.3.0/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变量分配新的值。
➜ ~ ruby variables.rb
New York
Paul
35
American
London
这是以上例子的输出。
之前我们已经介绍过常量了,它一直都保存着一个值。但是不同于其他语言,Ruby没有对这个进行强制限制。
#!/usr/local/rvm/rubies/ruby-2.3.0/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
puts var
定义并初始化一个变量。随后又给它分配了一个新的值,这是合法的。
WIDTH = 110
我们给常量分配了一个新的值。常量一旦创建就不应该改变,否则它就不意味着是一个常量。Ruby解释器将会给出一条警告。
➜ ~ ruby constants.rb
40
50
100
constants.rb:12: warning: already initialized constant WIDTH
constants.rb:2: warning: previous definition of WIDTH was here
110
以上是脚本的输出。
5.变量插值
变量插值(interpolation)是将字符串中的变量替换成它的值。变量插值的其他说法是:变量置换和变量扩展。
#!/usr/local/rvm/rubies/ruby-2.3.0/bin/ruby
age = 34
name = "William"
puts "#{name} is #{age} years old"
在Ruby中字符串是不可变的。我们不能修改一个已存在的字符串。变量插值是字符创建时进行的。
age = 34
name = "William"
定义两个变量。
puts "#{name} is #{age} years old"
字符串是被双引号所引起来。当我们将变量名放在#{和}字符之间时,这个变量会被它的值所篡改。
➜ ~ ruby interpolation.rb
William is 34 years old
以上是这个例子的输出。