一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Ruby

 hdzgx 2019-03-02
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)容的流程:

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

執(zhí)行ruby命令

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

逐行讀取文件的內(nèi)容,上面的程序的問題

  1. 一下子讀取全部文件的內(nèi)容很耗時(shí)
  2. 讀取文件的文件的內(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é)果)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    日系韩系还是欧美久久| 99久久国产精品成人观看 | 成人精品一区二区三区综合 | 自拍偷拍福利视频在线观看| 日韩人妻一区中文字幕| 欧美精品亚洲精品日韩专区| 国内精品一区二区欧美| 亚洲欧美日韩在线中文字幕| 四季av一区二区播放| 初尝人妻少妇中文字幕在线| 国产免费观看一区二区| 欧美日韩综合免费视频| 成人精品一区二区三区综合| 亚洲国产av精品一区二区| 亚洲欧美日韩国产自拍| 丰满少妇被猛烈撞击在线视频| 中国美女偷拍福利视频| 国产肥女老熟女激情视频一区| 欧美综合色婷婷欧美激情| 日韩欧美国产亚洲一区| 日韩一区二区三区在线欧洲| 夜夜躁狠狠躁日日躁视频黑人| 欧美做爰猛烈叫床大尺度| 亚洲精品国男人在线视频| 欧美午夜不卡在线观看| 精品国产亚洲av久一区二区三区| 国产欧美日韩在线一区二区| 国产在线观看不卡一区二区| 亚洲欧洲成人精品香蕉网| 国产又大又猛又粗又长又爽| av在线免费播放一区二区| 亚洲三级视频在线观看免费| 色婷婷日本视频在线观看| 日韩一区二区三区四区乱码视频| 日韩一区二区三区久久| 成人精品视频在线观看不卡| 欧美日韩一区二区综合| 亚洲欧美国产中文色妇| av中文字幕一区二区三区在线| 亚洲成人精品免费在线观看| 日韩欧美国产高清在线|