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