在这节习题中,我们将涵盖另外一种将变量传递给脚本的方法(所谓脚本,就是你写的 .rb 文件)。你已经知道,如果要执行` ex13.rb`,只要在命令列中执行 `ruby ex13.rb `就可以了。这句命令中的` ex13.rb` 部分就是所谓的「参数(argument)」,我们现在要做的就是写一个可以接受参数的脚本。
将下面的程序写下来,后来我将详细解释
~~~
first, second, third = ARGV
puts "The script is called: #{$0}"
puts "Your first variable is: #{first}"
puts "Your second variable is: #{second}"
puts "Your third variable is: #{third}"
~~~
`ARGV `就是「参数变量(argument variable)」,是一个非常标准的术语。在其他的程序语言中你也可以看到它全大写的原因是因为它是一个「常数(constant)」,意思是当它被赋值之后你就不应该去改变它了。这个变数会接收当你运行 Ruby 脚本时所传入的参数。通过后面的习题你将对它有更多的了解。 你将对它有更多的了解。
第 1 行将 `ARGV` 「解包(unpack)」,与其将所有参数放到同一个变数下面,我们将每个参数赋予一个变量名称 `first` 、 `second` 以及 third。脚本本身的名称被存在一个特殊变量` $0` 里,这是我们不需要解包的部份。也许看来有些怪,但「解包」可能是最好的描述方式了。它的涵义很简单:「将` ARGV` 中的东西解包,然后将所有的参数依次赋予左边的变量名称」。
接下来就是正常的输出了。
# 你应该看到的结果
* * * * *
用下面的方法执行你的程序:
`ruby ex13.rb first 2nd 3rd`
如果你每次使用不同的参数执行,你将看到下面的结果:
~~~
$ ruby ex13.rb first 2nd 3rd
The script is called: ex13.rb
Your first variable is: first
Your second variable is: 2nd
Your third variable is: 3rd
$ ruby ex13.rb cheese apples bread
The script is called: ex13.rb
Your first variable is: cheese
Your second variable is: apples
Your third variable is: bread
$ ruby ex13.rb Zed A. Shaw
The script is called: ex13.rb
Your first variable is: Zed
Your second variable is: A.
Your third variable is: Shaw
~~~
你其实可以将「first」、「2nd」、「3rd」替换成任意东西。
~~~
ruby ex13.rb stuff I like
ruby ex13.rb anything 6 7
~~~
# 加分习题
* * * * *
1. 传三个以下的参数给你的脚本。当有缺少参数时哪些数值会被使用到?
2. 再写两个脚本,其中一个接收更少的参数,另一个接收更多的参数。在参数解包时给它们取一些有意义的变数名称。
3. 结合 `gets.chomp `和 `ARGV` 一起使用,让你的脚本从用户手上得到更多输入。
- 笨方法更简单
- 习题 00: 准备工作
- 习题 01: 第一个程序
- 习题 02: 注释和#号
- 习题 03: 数字和数学计算
- 习题 04: 变量的命名
- 习题 05: 更多的变量和输出
- 习题 06: 字符串和文字
- 习题 07: 更多输出
- 习题 08: 输出,输出
- 习题 09: 输出,输出,输出~
- 习题 10: 那是啥?
- 习题 11: 提问
- 习题 12: 模块
- 习题 13: 参数,解包,参数
- 习题 14: 提示和传递
- 习题 15: 读取文件
- 习题 16: 操作文件
- 习题 17: 更多的文件操作
- 习题 18: 命名,变量,代码,函数
- 习题 19: 函数和变量
- 习题 20: 函数和文件
- 习题 21: 函数可以传入信息
- 习题 22: 到现在你学到了什么?
- 习题 23: 阅读一些代码
- 习题 24: 更多练习
- 习题 25: 更多更多的练习
- 习题 26: 恭喜你,现在来考试了!
- 习题 27: 记住逻辑关系
- 习题 28: Boolean表达式练习
- 习题 29: 如果
- 习题 30: Else 和 If
- 习题 31: 做出判断
- 习题 32: 循环和数组
- 习题 33: While
- 习题 34: 存取数组里的元素
- 习题 35: 分支和函数
- 习题 36: 设计和测试
- 习题 37: 重视各种符号