日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Ruby慣用法總結(jié)概覽

Ruby最近是一個(gè)比較熱門的詞匯,許多程序員都開始將目光轉(zhuǎn)向這項(xiàng)語言。它存在著許多慣用法,下面就向大家總結(jié)了一些Ruby慣用法,作為參考對(duì)象。#t#

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了海珠免費(fèi)建站歡迎大家使用!

迭代

一般寫法:

for i in (1..10) puts i end

習(xí)慣寫法:

(1..10).each{|i| puts i}

1.upto(10){|i| puts i} # from njmzhang

||=賦值

一般寫法:

number = 1 if number.nil? number = 1 unless number

習(xí)慣寫法:

number ||= 1

程序入口

if __FILE__ == $0

if $PROGRAM_NAME == __FILE__

這個(gè)相當(dāng)于main(), 邏輯判斷的意思當(dāng)程序名($0或另一個(gè))和當(dāng)前文件名(__FILE__)一致時(shí),也就是當(dāng)前文件是被單獨(dú)執(zhí)行的而不是被別的文件調(diào)用。這個(gè)方法還有個(gè)用法是作為unit test使用。

預(yù)設(shè)變量和特殊記號(hào)

類似$0的Perl風(fēng)格預(yù)設(shè)常量還有很多,參見Programming Ruby p319

其中比較常用的如$:代表庫搜索路徑,修改方法常見有: 代碼$:.unshift('buildscript') # from gigix 或 $: << File.join(File.dirname(__FILE__), 'CurrentClass')

后一種方法使用了相對(duì)路徑,因?yàn)镽uby的module不要求namespace和文件目錄結(jié)構(gòu)要對(duì)應(yīng)一致,很多時(shí)候統(tǒng)統(tǒng)放一個(gè)目錄里
%w格式化命令(from qiezi) 可以少打幾個(gè)引號(hào)

%w{a b c d} #

等價(jià)

['a', 'b', 'c', 'd']

``(~鍵下的撇號(hào))用來執(zhí)行shell外部命令,如:

`help`
inject

一般寫法:

result = [] (1..10).each{|item| result << item}

習(xí)慣寫法:

(1..10).inject([]){|array, item| array << item}

inject有點(diǎn)難理解,相當(dāng)于python的reduce和一些FP里的fold。inject的塊變量有兩個(gè)(這里是array和 item),第二個(gè)變量(item)用來枚舉被inject的集合(這里是(1..10)這個(gè)range), 而第一個(gè)變量(array)由inject的參數(shù)初始化(這里是[],可選),并在block被反復(fù)執(zhí)行時(shí)保持持久(相當(dāng)于靜態(tài)變量),而item則在每 次枚舉時(shí)被更新為下一個(gè)值。

我們?cè)倏匆幌耰nject的另一種通常用法就會(huì)更明白了:

求和

(1..10).inject{|sum, item| sum += item}

這個(gè)等于

(1..10).inject(0){|sum, item| sum += item}

也就是塊變量sum被初始化成0然后反復(fù)迭代執(zhí)行塊的內(nèi)容,最后返回sum,并行賦值 這個(gè)很多人都知道了,比如:

a,b = 0, 1 a,b = b, a #

交換

a,b

當(dāng)然可以延伸出一些很詭異的變化,不提倡使用阿。

還有一個(gè)用法是讓函數(shù)返回“多個(gè)結(jié)果”(不是多個(gè)對(duì)象),如:

def test 1,2 end x, y = test #x = 1, y = 2

這個(gè)njmzhang說的很對(duì),其實(shí)函數(shù)返回的是一個(gè)array,然后再并行匹配到變量上去。(所以我對(duì)多個(gè)結(jié)果特別加了引號(hào)) 這顯然是個(gè)syntax sugar,你隨便用逗號(hào)分割幾個(gè)變量是不會(huì)自動(dòng)組成array的。

注意這種并行匹配當(dāng)兩遍不平衡時(shí)會(huì)造成的問題:

a,b = [1,2,3] # a = 1, b = 2, 3

被丟棄

a,b,c = [1,2] # a = 1, b = 2, c = nil

被初始化成nil

*的匹配 一般來說*用于把一個(gè)array展開:

a, *b = [1,2,3] #a = 1, b = [2,3]

類似FP里的x:xs(haskell), x::xs(ocaml), [a | b] (erlang from 布娃娃)

rescue簡(jiǎn)單用法

begin 1/0 rescue puts 'wrong' end

可以簡(jiǎn)化為

1/0 rescue puts 'wrong'


新聞標(biāo)題:Ruby慣用法總結(jié)概覽
鏈接地址:http://www.5511xx.com/article/dpgdsjo.html