Ruby

Ruby基礎知識總結

Ruby的運行方法

1.使用ruby命令運行

首先進入到當前文件所在的,而後在命令行運行ruby 文件名java

$ cd  tmp/ruby
$ruby demo01.rb

2.使用irb命令執行代碼

$ irb
irb(main):001:0> print("hello")

exit能夠退出當前的命令行正則表達式

2.基礎語法

2.1‘’和「」

使用雙引號中包含的轉義字符會發生轉義,使用單引號包含的字符一般不會發生轉義,
可是\和單引號時,須要使用\去轉義。shell

雙引號數組

print("hello \n world! \n") #hello 和world會換行

單引號ruby

print('hello \n world \n')  #hello \n world \n

單引號發生轉義數據結構

print('hello \\ \'world\' ') #hello \ 'world'

2.2方法調用

ruby在調用方法時能夠省略(),print("hello「),其中print 是方法
「hello」爲參數ui

print("hello")   #等價 print "hello"

print 能夠接受多個參數,參數間用逗號隔開編碼

print "hello ","world ","aaa"    #hello world aaa

print和puts
puts會每次打印的結果後面加換行符命令行

puts "hello","world"   #hello 
                       #world

p方法和print、 puts
p方法中數值和字符串會輸出不一樣的結果,且轉義字符不會發生轉義code

puts('20')  #20
puts(20)    #20
p('20')     #'20'
p(20)       #20
p("hello \n world")  #"hello \n world"

2.4中文的輸出

Ruby的某些環境下,執行中文腳本會發生錯誤(invalid multibyte
char(utf-8)),這個是沒有指定程序的編碼形成的.
解決的方法:在程序的首行代碼添加註釋「# encoding:編碼方式」,
若是沒有魔法註釋,默認使用utf-8

但願以UTF-8編碼在控制檯輸出結果,可使用-E 編碼方式

$ruby -E UTF-8 腳本名稱
$irb  -E UTF-8

2.5 字符串拼接

area=300
print "面積爲:#{area}mm"   #面積爲:300mm

2.6 註釋

單行註釋使用#表示,從#到該行的結尾的內容都是註釋的內容

#這是一行註釋

多行註釋 =begin和=end之間的內容

=begin
做者:adsad
年齡:阿斯大賽的
=end

2.7 控制語句

條件控制語句

語法:if 條件 then 條件成立時執行 end

if 1==1 then
    print "1等於1"  # 1等於1
end

其中then能夠省略

語法:if 條件 then 條件成立時執行 else 條件不成立時執行 end

if 1==2 then
    print "1等於2"
else
    print "1不等於2" #1不等於2
end
循環

while語句
語法:while 循環條件 do 循環處理 end
其中do能夠省略
eg: 打印1~10的數字

i=1
while i<=10 do
  puts(i)
  i=i+1
end

times方法
times用來處理一直循環次數的狀況
語法:循環次數.times do 循環處理 end
eg:輸出10次hello world

10.times do 
  puts "hello world"
end

2.8 數組

建立數組

arr=[]  #建立空數組
arr1=["hello",10] # 數組元素能夠是不一樣類型的對象
puts arr1[1]  #10

經過索引訪問和修改數組的值

arr=["hello",12]
puts arr[0]  #hello
arr[0]=12;
puts arr[0]  #12

給數組中不存在的索引賦值能夠改變數組的長度

arr=["hello",12]
arr[4]=10
p arr[3]  # nil
puts arr[4]  #10

獲取數組的長度

arr=["hello",12]
puts(arr.size)   #2

遍歷數組,對數組中的值執行某個方法
語法:數組.each do |n| 處理循環代碼 end
eg:遍歷數組,打印出數組中的每個值

arr=["hello",12]
arr.each do |n|
  puts n
end

2.9 散列

散列是程序中經常使用到的數據結構,散列通常使用字符串或者符號、數值做爲健,來保存對應的對象

符號與字符串類似,能夠將符號理解爲輕量級的字符串,

通常做爲名稱標籤使用,建立符號,只須要在表示符或者字符串前加上:

sym=:foo     #表示符號":foo"
sym2=:"foo"  #同上

符號和字符串轉換

sym=:foo
p(sym.to_s)  #「foo」
str="foo"
p str.to_sym  #:foo

建立散列

song={
    :title=>"love",
    :artist=>"xiaohudui"
}
#簡潔寫法
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"}

遍歷散列
語法:散列.each do |key,value| 循環處理代碼 end
eg:遍歷散列,打印出散列中全部的健和值

song={
    title:"love",
    artist:"xiaohudui"
}
song.each do |key,value|
  print key,"=>",value,"\n" # title=>love
                            # artist=>xiaohudui
end

2.10 正則表達式

建立正則表達式

regexp=/aaa/

用正則表達式匹配字符串
語法:/模式/ =~"字符串「

regexp=/aaa/
reg=/java/
puts regexp=~"lisadasaaadd"   #7
p reg=~"lisadasaaadd"         #nil

匹配成功返回模式開始的位置,失敗返回nil(表示對象不存在)

3.Ruby獲取命令行參數

經過ARGV數組獲取命令行中輸入的參數

num1=ARGV[0]
num2=ARGV[1]
#使用to_i方法把字符串轉化成整數
puts "num1+num2=#{num1.to_i+num2.to_i}"  #num1+num2=3

運行ruby命令執行腳本

$ ruby 腳本名稱  1 2

文件的讀取
讀取文件內容的流程:

  1. 打開文件
  2. 讀取文件的內容
  3. 輸出文件的文本數據
  4. 關閉文件
filename=ARGV[0]
file=File.open(filename)
text=file.read
print text
file.close

執行ruby命令

$ruby 上面的腳本名 讀取文件的文件名

逐行讀取文件的內容,上面的程序的問題

  1. 一會兒讀取所有文件的內容很耗時
  2. 讀取文件的文件的內容會保存在內存中,遇到大文件時,程序會崩潰

一種更好的辦法是逐行文件的內容

filename=ARGV[0]
file=File.open(filename)
file.each_line do |line|
  print line
end
file.close

each_line方法會對文件逐行讀取,每次只讀取一行的內容輸出,知道文件的內容
輸出完爲之.

4.方法和其餘文件的引用

方法

方法的定義和調用

#定義方法
def hello
  puts "hello"
end
#調用方法
hello   #等價hello()

文件引用

ruby中把能被其餘程序引用的程序稱爲庫,使用require或require_relative
方法來引用庫,庫名能夠省略後綴名rb
調用require方法後,Ruby搜索指定庫並讀取指定庫的內容,讀取完畢後纔會執行
require後面的內容。

require和require_relative的區別

require在預先定義好的路徑下引用與ruby一塊兒安裝的庫

require_relative是根據當前的腳本的執行目錄來進行的
eg:模範grep命令的例子
grep.rb定義一個方法

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

文件的讀取
讀取文件內容的流程:
1. 打開文件
2. 讀取文件的內容
3. 輸出文件的文本數據
4. 關閉文件
mzt

shell中輸入

$ruby Uagegrep.rb  mzt hello.txt  #mzt(執行的結果)
相關文章
相關標籤/搜索