podfile文件用到的Ruby语言的学习和使用
序言
在我們的iOS開(kāi)發(fā)中,現(xiàn)在的cocoapods已經(jīng)是事實(shí)上的添加第三方庫(kù)的標(biāo)準(zhǔn)方式了.在cocoapods中的podfile文件就是利用Ruby語(yǔ)言寫(xiě)的一款DSL(Domain Specific Language,領(lǐng)域特定語(yǔ)言).
Ruby簡(jiǎn)介
在Ruby的維基百科Ruby(翻墻才能訪問(wèn))上的說(shuō)明:Ruby 是一種面向?qū)ο?、命令式、函?shù)式、動(dòng)態(tài)的通用編程語(yǔ)言。 在20世紀(jì)90年代中期由日本電腦科學(xué)家松本行弘(Matz)設(shè)計(jì)并開(kāi)發(fā)。 遵守BSD許可證和Ruby License。 它的靈感與特性來(lái)自于Perl、Smalltalk、Eiffel、Ada以及Lisp語(yǔ)言。
在Ruby中,一切都是對(duì)象,連在其它語(yǔ)言中的基本類型在Ruby中都是對(duì)象.例如對(duì)于數(shù)字1 ,它也是對(duì)象,我們可以 1.methods 來(lái)調(diào)用1這個(gè)對(duì)象的methods方法,它沒(méi)有所謂的運(yùn)算的概念,1+1其實(shí)是1.+(1)就是1這個(gè)對(duì)象的+方法
在MAC系統(tǒng)中,已經(jīng)內(nèi)置了Ruby了,所以我們不需要額外安裝就可以使用.
這里有兩個(gè)在線運(yùn)行Ruby的網(wǎng)頁(yè),在我們只想驗(yàn)證一些簡(jiǎn)單的Ruby調(diào)用的時(shí)候,比較方便w3cschool Ruby
常用結(jié)構(gòu)的語(yǔ)法
字符串
用雙引號(hào)"字符串內(nèi)容",這種方式創(chuàng)建的字符串中可以通過(guò) #{變量/表達(dá)式}的方式來(lái)嵌入表達(dá)式.在生成的時(shí)候,這個(gè)表達(dá)式會(huì)被計(jì)算
例如
單引號(hào)’字符串內(nèi)容’來(lái)創(chuàng)建字符串
符號(hào)
這玩意,相對(duì)于其他語(yǔ)言來(lái)說(shuō)是比較特別的,在Ruby中,字符串是個(gè)對(duì)象,定義的兩個(gè)字符串"a" 和另一個(gè)地方定義的"a",其內(nèi)存地址是不一樣的,這個(gè)在我們的OC中,它是常量字符串,會(huì)被系統(tǒng)直接存放在常量區(qū),他們的地址啥的都是一樣的.
但在Ruby中,是不同的.那怎么實(shí)現(xiàn)OC中那樣的常量字符串呢? 在Ruby中就是 符號(hào)!!! 創(chuàng)建一個(gè) Symbol 對(duì)象的方法是在名字或者字符串前面加上冒號(hào):
數(shù)組
常用的創(chuàng)建數(shù)組的方式有 語(yǔ)法糖[] 和 Array.new
nums = [1,2,3,4,5] p nums #=> [1,2,3,4,5] a = Array.new p a #=> [] a = Array.new(5) p a #=> [nil,nil,nil,nil,nil] a = Array.new(5,0) p a #=> [0,0,0,0,0]new方法的第一個(gè)參數(shù)是個(gè)數(shù),第二個(gè)參數(shù)是默認(rèn)值,如果沒(méi)有,則元素都會(huì)被初始化為nil.
通過(guò) []索引來(lái)獲取數(shù)組,同OC等語(yǔ)言不同的是,這里的索引值可以是負(fù)數(shù),負(fù)數(shù)表示從數(shù)組尾部開(kāi)始獲取元素 ,還可以超過(guò)數(shù)組的大小,只是這個(gè)時(shí)候,會(huì)返回nil,所以在Ruby中就沒(méi)有所謂的越界的概念了
nums = [1,2,3,4,5] puts nums[2] #=> 3字典/散列
在Ruby中,叫法是散列,對(duì)應(yīng)的就是OC中的字典(NSDictionary)
創(chuàng)建的方式 ,直接使用 {鍵 => 值,|鍵 => 值|} ,當(dāng)然了,如果用符號(hào)做鍵,可以用 {鍵: 值,|鍵 : 值|}
另一種方式是Hash.new
h = Hash.new; h["key1"] = "1" p h["key1"] #=> "1"條件判斷
語(yǔ)法格式
if 條件 then處理 end #其中的then可以省略還有帶有多個(gè)else的
if 條件 then處理 elsif 條件 then處理 else 處理 end # 其中的then也是可以省略的在Ruby中,還多了個(gè)和if相對(duì)的unless.if的條件是滿足就執(zhí)行,unless是條件不滿足就執(zhí)行
也就是 unless其實(shí)相當(dāng)于 if !條件
case 語(yǔ)句
case 比較對(duì)象 when 值1 then處理1 when 值2 then處理2 else 處理3 end方法/函數(shù)定義
def funName(parm1,parm2 ,.....)函數(shù)體 end舉個(gè)實(shí)際的例子
def subDirctory(rootDirectPath)subArr = []Dir::foreach rootDirectPath do |filename| if filename != "." and filename != ".." and !filename.start_with?(".")sub = "#{rootDirectPath}/#{filename}"if File.directory?(sub) puts "#{sub} is directory"subArr << filenameend endendreturn subArr end#獲取xcodeproj文件路徑和target def projectInfo(projectArr,prefix)projects = []projectArr.each { |subDirect|modulesProjs = Dir.glob("#{subDirect}/*.xcodeproj") projects << modulesProjs}projects.each { |project|projectName = File.basename project, extnputs projectName} endpath = "./xcodeproj-1.6.0" subArr = subDirctory(path) puts subArr從這個(gè)實(shí)際例子,我們可以知道, 方法的調(diào)用 方法名(參數(shù))的方式.這里的括號(hào)是可以省略的!!!
也就是
當(dāng)然了,函數(shù)還可以帶上默認(rèn)值等等,在此不再贅述.
記錄的一些小內(nèi)容
輸出一個(gè)對(duì)象支持的方法
p project_reference.methods methods方法,可以輸出一個(gè)對(duì)象能夠支持的所有的方法打印日志到控制臺(tái)
print –不會(huì)換行 puts –會(huì)換行打印對(duì)象的類型
puts project_reference.class在ruby中,可能會(huì)看到如下的方法
products_group.children << ref
這個(gè)是普通的方法 <<,默認(rèn)一般都是給數(shù)組添加一個(gè)到末尾
ruby中引入其它的庫(kù),或者文件,類似于inclue
require_relative 'generator/render’這個(gè)是在當(dāng)前目錄下尋找某個(gè)rb文件!
ruby中,對(duì)于一個(gè)數(shù)組,有 map,collect,select,reject四個(gè)方法,這四個(gè)方法,在帶有block的時(shí)候,可以用來(lái)返回一個(gè)新的數(shù)組,這個(gè)數(shù)組是block中方法的執(zhí)行結(jié)果
例如
這里是要取數(shù)組中class是PBXFrameworksBuildPhase的數(shù)組,然后取第一個(gè)
ruby中優(yōu)雅的幾個(gè)符號(hào):
||=
@foo ||= 1 的意思是,如果 foo 屬性還沒(méi)賦值,則賦為1,否則保留原來(lái)的值。這在一些“如果你不給我個(gè)初始值,我就算出一個(gè)初始值”的地方會(huì)很有用
像數(shù)組用這個(gè)就很方便
意思是 如果.build_settings[‘HEADER_SEARCH_PATHS’]這個(gè)數(shù)組中有值,那么就保留原來(lái)的,沒(méi)有的話,就賦值為 "$(inherited) “
<<
config.build_settings['HEADER_SEARCH_PATHS'] << "yohunl/cddr/path”意思是追繳,相當(dāng)于調(diào)用數(shù)組的append方法!!
總結(jié)
以上是生活随笔為你收集整理的podfile文件用到的Ruby语言的学习和使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ltp词性标注
- 下一篇: 45. All rivers runs