第1章 与Ruby的第一次接触
Print(“Hello,\nRuby\n!\n”) |
Hello, Ruby ! |
Print(‘Hello,\nRuby\n!\n’) |
Hello,\nRuby\n!\n |
使用“’‘”括住的字符串,并不会去解释“\n”之类的特殊字符,而会直接显示出来。不过有两个例外,那就是想要在字符串里包含“\”与“’”这两个字符时,前面还是必须加上“\”。例如:
print(‘Hello, \’Ruby\’.’) print(‘Hello, \\ Ruby.’) |
Ruby的方法允许省略“()”。另外,想要连续显示多个字符串时,可以使用“,”隔开,则这些字符串会依序显示出来。如: print(“Hello, ”, “Ruby”, “.”, “\n”)
puts方法与print方法不同,显示的字符串最后面一定会换行。
用来显示对象时很有用的p方法。
puts(“100”) #=> 100 puts(100) #=> 100 p “100” #=> “100” p 100 #=> 100 |
puts “Hello, \n\tRuby.” p “Hello, \n\tRuby.” |
Hello, Ruby. “Hello, \n\tRuby.” |
一般来说,print方法用在程序要显示出执行结果或消息的时候,而p方法则用在想要观察执行中的程序运行情况的时候。
若想要显示可能包括日文内容的对象,执行ruby程序时需要加上-Ks(Shift_JIS)、-Ke(EUC-JP)之类的环境参数,这些参数用来指定文字编码。针对中文字符串,可以指定-Ku参数(UTF-8)。如:
Windows环境 > ruby –Ks 脚本文件
include Math print(“sin(3.1415) = ”, sin(3.1415) , “\n”) print(“sqrt(10000) = ”, sqrt(10000), “\n”) |
sin(3.1415) = 9.26535896604902e-005 sqrt(10000) = 100.0 |
print(“sin(3.1415) = ”, Math.sin(3.1415), “\n”) |
注释使用“#”符号表示。一行中,从“#”的位置知道行尾都是注释。另外,从一行的开头写起的“=begin”与“=end”所包括的区域也会是注释。
用“==”比较字符串是否相同。用“!=”判断值是否相异。
if 条件 then 条件符合时行为 else 条件不符时行为 end (*then可以省略) |
while 条件 do 行为 end
(* do可以省略) |
当次数确定时,首用”times” 反复次数.times { 行为 } |
定义方法 |
def 方法名 行为 end |
|
将库读入程序 |
require “库名” (*库名可省略“.rb”部分) |
|
需将库文件与使用该库文件方法的文件放在同一个目录下。
第2章 方便的对象
像数组、哈希这种用来存放对象的对象,又称为容器。
若指定的索引位置在当前的数组中不存在,则数组的大小会改变。在一个数组里,也可以存放不同类型的数组。
要获取数组的大小,可以使用size方法。
数组.each {|变量| 重复执行的动作 } |
name = [“Susan”, “Brenda”, “Helen”] name.each {|n| print n, “\n” } |
建立哈希时使用“{}”,并要使用“=>”符号定义用来取出对象的键与该键取出的值。
font_table = {“normal” => “+0”, “small” => “-1”, “big” => “+1”}
从哈希里获取对象: 哈希名[键]
哈希没有固定的顺序,并不能“按存放时的顺序取出数据”。
哈希.each {|键的变量, 值的变量| 重复执行的动作 } |
一般用key表示键的变量,value表示值得变量 |
要将ruby指令执行的结果储存到文件里,可以使用“重定向(redirect)”功能。执行程序的时候,在指令的后面加上“>文件名”,则输出会被存在文件里。
pp方法
pp是pretty print的缩写,使用pp方法时,需要预先通过require方法读入pp库程序文件。使用pp方法在程序执行的时候执行结果更为直观易懂。
v = [{“key_00” => “Susan”, “key_01” => “Brenda”, “key_02” => “Helen”}] p v pp v |
[{“key_00” => “Susan”, “key_01” => “Brenda”, “key_02” => “Helen”}] [{“key_00” => “Susan”, “key_01” => “Brenda”, “key_02” => “Helen”}]
|
正则表达式
建立正则表达式对象的语法如下: /样式/
当把正则表达式拿来匹配字符串时,就要使用“=~”运算符。语法: /样式/ =~ 想要匹配的字符串
p /Ruby/ =~ “Yet Another Ruby Hacker” #=> 12
当匹配成功时,会返回匹配成功的位置。文字的位置与数组一样,是从0开始算的。而匹配失败时则会返回nil。
正则表达式右侧的“/”后面如果加上一个“i”,则匹配时就不区分大小写了。
p /Ruby/i =~ “rUBy” #=> 0
nil是表示对象不存在的特殊值。在if和while条件判断中,false和nil都被作为“假”来处理,除此之外的其他取值都作为“真”来处理。因此不只是返回false和true的方法,其他的返回各种各样的值和nil的方法都可以作为判断条件。
第3章 指令设计
从命令行输入的数据
要取得命令行所传入的数据,可以使用“ARGV”这个数组对象。在ARGV数组中,以字符串的形式存放着在命令行对指令脚本传入的实参。
利用命令行给指令脚本指定参数的场合,在参数之间,需要用空格隔开进行输入。
num0 = ARGV[0].to_i num1 = ARGV[1].to_i print num0, “ + “, num1, “=”, num0+num1, “\n” |
读取文件 |
filename = ARGV[0] file = open (filename) text = file.read print text file.close |
filename = ARGV[0] file = open (filename) while text = file.gets do print text end file.close |
从文件逐行读入数据并显示出来 (gets方法会在每次调用时,从文件里取出一行字符串)
|
只显示文件里符合特定样式的几行 “Regexp.new(str)”这种写法,可以使用实参的str字符串来建立正则表达式对象。 |
pattern = Regexp.new(ARGV[0]) filename = ARGV[1] file = open(filename) while text = file.gets do if pattern =~ text print text end end file.close |
pp方法在使用时起到和p方法同样的效果和目的。pp是(pretty print)的缩写。使用pp方法时,需要预先通过require方法读入pp库程序文件。
- 在文字的每一行前加编号;
- 将日语全角的空白转为两个半角的空白;
- 将特定规则的文字的行进行输出;
- 将字幕全部转换为大写
对全体数据进行某些特定处理并输出的程序称为过滤器(Filter)。