6. puts “Tax on $#{subtotal} is $#{tax},so grand total is $#{subtotal+tax}”
显然,如果这个程序能计算不同种类的小计而不只是一遍遍地计算同样的值会更加有用。这
里有一个简单的版本,会提示用户输入小计值:
taxrate = 0.175
print "Enter price (ex tax): "
s = gets
subtotal = s.to_f
tax = subtotal * taxrate
puts "Tax on $#{subtotal} is $#{tax},so grand total is $#{subtotal+tax}"
这里的 s.to_f 是 String 类的一个方法。它将 string 转化为浮点数。比如,字符串
”145.45”将会转化为浮点数 145.45。如果该字符串不能被转化,返回 0.0。所以,
”Hello world”.to_f 将返回 0.0。
注释 ...
随这本书发布的很多源码都有很多的注释文档,这些注释文档是被 Ruby 解
释器忽略的。
注释一般都是在英镑 ( 哈希 ) 符号#之后。在该字符之后的同一行文本均为
注释:
#this is a comment
Puts(“hello”) #this is also a comment
如果你想书写多行注释,你可以在多行文本的开头加上 =begin 在结尾加上
=end
(=begin 和= end 必须左对齐 ):
=begin
This is a
Multiline
Comment
=end
条件 判断语
句:IF … THEN
上面的那个简单的税收计算器存在一个问题就是它接受负的小计值并计算出负的税收—这种
状况可是政府部门不愿意看到的!因此需要检查负值,如果出现负值将其设置为 0。这是我
5taxcalculator.rb
7. 新版本的代码:
taxrate = 0.175
print "Enter price (ex tax): "
s = gets
subtotal = s.to_f
if (subtotal < 0.0) then
subtotal = 0.0
end
tax = subtotal * taxrate
puts "Tax on $#{subtotal} is $#{tax},so grand total is $#{subtotal+tax}"
Ruby 中的条件判断和其他语法中相似。需要注意的是,括号仍然是可选的,而且关键词
then 可是可选的。然而,如果你打算像下面那般书写代码,在条件判断后面不换行,那么
then 是必须的:
if(subtotal < 0.0) then subtotal = 0.0 end
这样将所有的代码写在一行不能给代码增加任何可读性,我更倾向于防止这样写代码。由于
我长时间的 Pascal 编码经历,我会本能地在 if 条件后添加一个 then ,而这个真的是没有必
要,你可以认为这是我个人的一点点小偏执。关键词 end 用于结束 if 语句块,它是必须的。
忘记了添加 end 你的代码将无法运行。
局部变量和全局变量
在上一个例子中,我给 subutotal,tax 和 taxrate 等变量进行了赋值。这些变量均以小写字
母开头,它们都是局部变量。这就意味着它们只是存在于程序的某一指定部分,也就是说,
它们受限于一个定义明确的范围。下面是一个例子:
variables.rb
localvar = “hello”
$globalvar = “goodbye”
def amethod
localvar = 10