1.使用ruby命令運(yùn)行
首先進(jìn)入到當(dāng)前文件所在的,然后在命令行運(yùn)行ruby 文件名
$ cd tmp/ruby
$ruby demo01.rb
2.使用irb命令執(zhí)行代碼
$ irb
irb(main):001:0> print("hello")
exit可以退出當(dāng)前的命令行
2.基礎(chǔ)語(yǔ)法
2.1‘’和“”
使用雙引號(hào)中包含的轉(zhuǎn)義字符會(huì)發(fā)生轉(zhuǎn)義,使用單引號(hào)包含的字符通常不會(huì)發(fā)生轉(zhuǎn)義,
但是\和單引號(hào)時(shí),需要使用\去轉(zhuǎn)義。
雙引號(hào)
print("hello \n world! \n") #hello 和world會(huì)換行
單引號(hào)
print('hello \n world \n') #hello \n world \n
單引號(hào)發(fā)生轉(zhuǎn)義
print('hello \\ \'world\' ') #hello \ 'world'
2.2方法調(diào)用
ruby在調(diào)用方法時(shí)可以省略(),print("hello“),其中print 是方法
“hello”為參數(shù)
print("hello") #等價(jià) print "hello"
print 可以接受多個(gè)參數(shù),參數(shù)間用逗號(hào)隔開
print "hello ","world ","aaa" #hello world aaa
2.3print puts p 方法的區(qū)別
print和puts
puts會(huì)每次打印的結(jié)果后面加換行符
puts "hello","world" #hello
#world
p方法和print、 puts
p方法中數(shù)值和字符串會(huì)輸出不同的結(jié)果,且轉(zhuǎn)義字符不會(huì)發(fā)生轉(zhuǎn)義
puts('20') #20
puts(20) #20
p('20') #'20'
p(20) #20
p("hello \n world") #"hello \n world"
2.4中文的輸出
Ruby的某些環(huán)境下,執(zhí)行中文腳本會(huì)發(fā)生錯(cuò)誤(invalid multibyte
char(utf-8)),這個(gè)是沒有指定程序的編碼造成的.
解決的方法:在程序的首行代碼添加注釋“# encoding:編碼方式”,
如果沒有魔法注釋,默認(rèn)使用utf-8
希望以UTF-8編碼在控制臺(tái)輸出結(jié)果,可以使用-E 編碼方式
$ruby -E UTF-8 腳本名稱
$irb -E UTF-8
2.5 字符串拼接
area=300
print "面積為:#{area}mm" #面積為:300mm
2.6 注釋
單行注釋使用#表示,從#到該行的結(jié)尾的內(nèi)容都是注釋的內(nèi)容
#這是一行注釋
多行注釋 =begin和=end之間的內(nèi)容
=begin
作者:adsad
年齡:阿斯大賽的
=end
2.7 控制語(yǔ)句
條件控制語(yǔ)句
語(yǔ)法:if 條件 then 條件成立時(shí)執(zhí)行 end
if 1==1 then
print "1等于1" # 1等于1
end
其中then可以省略
語(yǔ)法:if 條件 then 條件成立時(shí)執(zhí)行 else 條件不成立時(shí)執(zhí)行 end
if 1==2 then
print "1等于2"
else
print "1不等于2" #1不等于2
end
循環(huán)
while語(yǔ)句
語(yǔ)法:while 循環(huán)條件 do 循環(huán)處理 end
其中do可以省略
eg: 打印1~10的數(shù)字
i=1
while i<=10 do
puts(i)
i=i+1
end
times方法
times用來(lái)處理一直循環(huán)次數(shù)的情況
語(yǔ)法:循環(huán)次數(shù).times do 循環(huán)處理 end
eg:輸出10次hello world
10.times do
puts "hello world"
end
2.8 數(shù)組
創(chuàng)建數(shù)組
arr=[] #創(chuàng)建空數(shù)組
arr1=["hello",10] # 數(shù)組元素可以是不同類型的對(duì)象
puts arr1[1] #10
通過索引訪問和修改數(shù)組的值
arr=["hello",12]
puts arr[0] #hello
arr[0]=12;
puts arr[0] #12
給數(shù)組中不存在的索引賦值可以改變數(shù)組的長(zhǎng)度
arr=["hello",12]
arr[4]=10
p arr[3] # nil
puts arr[4] #10
獲取數(shù)組的長(zhǎng)度
arr=["hello",12]
puts(arr.size) #2
遍歷數(shù)組,對(duì)數(shù)組中的值執(zhí)行某個(gè)方法
語(yǔ)法:數(shù)組.each do |n| 處理循環(huán)代碼 end
eg:遍歷數(shù)組,打印出數(shù)組中的每一個(gè)值
arr=["hello",12]
arr.each do |n|
puts n
end
2.9 散列
散列是程序中常用到的數(shù)據(jù)結(jié)構(gòu),散列一般使用字符串或者符號(hào)、數(shù)值作為健,來(lái)保存對(duì)應(yīng)的對(duì)象
符號(hào)與字符串相似,可以將符號(hào)理解為輕量級(jí)的字符串,
一般作為名稱標(biāo)簽使用,創(chuàng)建符號(hào),只需要在表示符或者字符串前加上:
sym=:foo #表示符號(hào)":foo"
sym2=:"foo" #同上
符號(hào)和字符串轉(zhuǎn)換
sym=:foo
p(sym.to_s) #“foo”
str="foo"
p str.to_sym #:foo
創(chuàng)建散列
song={
:title=>"love",
:artist=>"xiaohudui"
}
#簡(jiǎn)潔寫法
song1={
title:"love",
artist:"xiaohudui"
}
散列的使用
獲取散列中的對(duì)象
song1={
title:"love",
artist:"xiaohudui"
}
puts song1[:title] #love
給散列中添加對(duì)象
song={
title:"love",
artist:"xiaohudui"
}
song[:tel]="121323213"
p song #{:title=>"love", :artist=>"xiaohudui", :tel=>"121323213"}
遍歷散列
語(yǔ)法:散列.each do |key,value| 循環(huán)處理代碼 end
eg:遍歷散列,打印出散列中所有的健和值
song={
title:"love",
artist:"xiaohudui"
}
song.each do |key,value|
print key,"=>",value,"\n" # title=>love
# artist=>xiaohudui
end
2.10 正則表達(dá)式
創(chuàng)建正則表達(dá)式
regexp=/aaa/
用正則表達(dá)式匹配字符串
語(yǔ)法:/模式/ =~"字符串“
regexp=/aaa/
reg=/java/
puts regexp=~"lisadasaaadd" #7
p reg=~"lisadasaaadd" #nil
匹配成功返回模式開始的位置,失敗返回nil(表示對(duì)象不存在)
3.Ruby獲取命令行參數(shù)
通過ARGV數(shù)組獲取命令行中輸入的參數(shù)
num1=ARGV[0]
num2=ARGV[1]
#使用to_i方法把字符串轉(zhuǎn)化成整數(shù)
puts "num1+num2=#{num1.to_i+num2.to_i}" #num1+num2=3
運(yùn)行ruby命令執(zhí)行腳本
$ ruby 腳本名稱 1 2
文件的讀取
讀取文件內(nèi)容的流程:
- 打開文件
- 讀取文件的內(nèi)容
- 輸出文件的文本數(shù)據(jù)
- 關(guān)閉文件
filename=ARGV[0]
file=File.open(filename)
text=file.read
print text
file.close
執(zhí)行ruby命令
$ruby 上面的腳本名 讀取文件的文件名
逐行讀取文件的內(nèi)容,上面的程序的問題
- 一下子讀取全部文件的內(nèi)容很耗時(shí)
- 讀取文件的文件的內(nèi)容會(huì)保存在內(nèi)存中,遇到大文件時(shí),程序會(huì)崩潰
一種更好的辦法是逐行文件的內(nèi)容
filename=ARGV[0]
file=File.open(filename)
file.each_line do |line|
print line
end
file.close
each_line方法會(huì)對(duì)文件逐行讀取,每次只讀取一行的內(nèi)容輸出,知道文件的內(nèi)容
輸出完為之.
4.方法和其他文件的引用
方法
方法的定義和調(diào)用
#定義方法
def hello
puts "hello"
end
#調(diào)用方法
hello #等價(jià)hello()
文件引用
ruby中把能被其他程序引用的程序稱為庫(kù),使用require或require_relative
方法來(lái)引用庫(kù),庫(kù)名可以省略后綴名rb
調(diào)用require方法后,Ruby搜索指定庫(kù)并讀取指定庫(kù)的內(nèi)容,讀取完畢后才會(huì)執(zhí)行
require后面的內(nèi)容。
require和require_relative的區(qū)別
require在預(yù)先定義好的路徑下引用與ruby一起安裝的庫(kù)
require_relative是根據(jù)當(dāng)前的腳本的執(zhí)行目錄來(lái)進(jìn)行的
eg:模范grep命令的例子
grep.rb定義一個(gè)方法
def grep(pattern,filename)
file=File.open(filename)
file.each_line do |line|
if pattern=~line then
print line
end
end
end
Uagegrep.rb中引用grep.rb
require_relative "grep"
pattern=Regexp.new(ARGV[0])
filename=ARGV[1]
grep(pattern,filename)
hello.txt
文件的讀取
讀取文件內(nèi)容的流程:
1. 打開文件
2. 讀取文件的內(nèi)容
3. 輸出文件的文本數(shù)據(jù)
4. 關(guān)閉文件
mzt
shell中輸入
$ruby Uagegrep.rb mzt hello.txt #mzt(執(zhí)行的結(jié)果)
|