操作符表達式例: 1+2*3/4 為了便于編程,有些方法調(diào)用和控制結(jié)構(gòu)是以操作符的形式出現(xiàn)的。Ruby語言中有下列操作符。 高 :: [] +(單項) ! ~ ** -(單項) * / % + - << >> & | ^ > >= < <= <=> == === != =~ !~ && || .. ... ?:(條件操作符) =(+=, -= ... ) not 低 and or 左側(cè)的“高”和“低”表示操作符的優(yōu)先度。例如“&&”的優(yōu)先度要高于“||”,所以 a && b || c #=> (a && b) || c a || b && c #=> a || (b && c) 大部分操作符都是些特殊形式的方法調(diào)用,但有的操作符被嵌入語言之中,無法進行再定義。
賦值例: foo = bar foo[0] = bar foo.bar = baz 語法: 變量 ‘=‘ 表達式 常數(shù) ‘=‘ 表達式 表達式`[‘expr..`]‘ ‘=‘ 表達式 表達式`.‘標識符 ‘=‘ 表達式 我們使用賦值表達式向變量等對象進行賦值。賦值也可以用作局部變量和常數(shù)的聲明。賦值表達式的左邊必須是下列之一。
計算賦值例: foo += 12 # foo = foo + 12 a ||= 1 # 若a為偽或者a尚未定義,就把1賦值給a。初始化時的一種習(xí)慣寫法。 語法: 表達式1 op= 表達式2 # 表達式1等同于普通賦值表達式左邊的部分 op就是下列中的某一個。操作符與 +, -, *, /, %, **, &, |, ^, <<, >>, &&, || 這種賦值形式等同于 表達式1 = 表達式1 op 表達式2 但是,當 表達式1 op (表達式1 = 表達式2) 這個樣子。例如在屬性調(diào)用時 obj.foo ||= true 就不能解釋成 obj.foo = obj.foo || true 而應(yīng)該是 obj.foo || (obj.foo = true) 這樣才對。(根據(jù)obj.foo結(jié)果的不同,有時就不能調(diào)用obj.foo=) 多重賦值例: foo, bar, baz = 1, 2, 3 foo, = list() foo, *rest = list2() 語法: 表達式 [`,‘ [表達式 `,‘ ... ] [`*‘ [表達式]]] = 表達式 [, 表達式 ... ][`*‘ 表達式] `*‘ [表達式] = 表達式 [, 表達式 ... ][`*‘ 表達式] 多重賦值是指,在多個表達式以及數(shù)組中同時進行的賦值。左邊的各個表達式必須是可以被賦值的。若右邊只有一個表達式時,則將該表達式的計算值轉(zhuǎn)為數(shù)組后,再把數(shù)組中的各個元素依次賦值給左邊。若右邊數(shù)組元素的數(shù)量超過左邊的話,將忽略多余的數(shù)組元素。若右邊數(shù)組元素個數(shù)不足的話,將向左邊多余的元素中代入nil。 若左邊最后一個表達式前帶*的話,則將右邊多余的元素以數(shù)組的形式代入這個帶*的表達式中。若右邊沒有多余元素的話,就把空數(shù)組代入其中。 例: foo, bar = [1, 2] # foo = 1; bar = 2 foo, bar = 1, 2 # foo = 1; bar = 2 foo, bar = 1 # foo = 1; bar = nil foo, bar, baz = 1, 2 # foo = 1; bar = 2; baz = nil foo, bar = 1, 2, 3 # foo = 1; bar = 2 foo = 1, 2, 3 # foo = [1, 2, 3] *foo = 1, 2, 3 # foo = [1, 2, 3] foo,*bar = 1, 2, 3 # foo = 1; bar = [2, 3] 在多重賦值過程中,若使用括號的話,就可以把數(shù)組內(nèi)含的元素取出來進行賦值。 (foo, bar), baz = [1, 2], 3 # foo = 1; bar = 2; baz = 3 還可以把特殊形式的賦值表達式轉(zhuǎn)化為多重代入。 class C def foo=( v ) @foo = v end def []=(i,v) @bar = ["a", "b", "c"] @bar[i] = v end end obj = C.new obj.foo, obj[2] = 1, 2 # @foo = 1; @bar = ["a", "b", 2] 若左邊以","結(jié)尾或"*"后面沒有表達式時,將忽略右邊多余的元素。 例: foo,* = 1, 2, 3 # foo = 1 foo, = 1, 2, 3 # foo = 1 * = 1, 2, 3 當您想忽略方法調(diào)用中的所有參數(shù)時,就可以使用這個"*"(方法調(diào)用中的參數(shù)在進行交接時,大體遵循多重代入的規(guī)則)。 例: def foo(*) end foo(1,2,3) 多重賦值的值變換為右邊的數(shù)組。 范圍表達式例: 1 .. 20 /first/ ... /second/ 語法: 表達式1 `..‘ 表達式2 表達式1 ` ... ‘ 表達式2 如果不是出現(xiàn)在條件表達式中的話,它將返回從表達式1到表達式2的范圍對象。范圍對象是 Range 類的實例。使用"..."生成的范圍對象將不包括終點。 若它出現(xiàn)在條件表達式中時,在表達式1變成真之前,它將一直返回偽。接下來,在表達式2返回真之前,它將一直返回真。一旦表達式2變?yōu)檎妫鼘⒅匦路祷貍?。使?.."時,一旦表達式1返回真,馬上就會對表達式2進行計算(就象awk)。而使用"..."時,在進行下個計算之前,一直都不會對表達式2進行計算(就象sed)。 and例: test && set test and set 語法: 表達式 `&&‘ 表達式 表達式 `and‘ 表達式 首先計算左邊,若結(jié)果為真就接著計算右邊。"and"操作符的作用相同但優(yōu)先度更低。 將包含 p(true && false) #=> false p((true and false)) #=> false or例: demo || die demo or die 語法: 表達式 `||‘ 表達式 表達式 or 表達式 首先計算左邊,若結(jié)果為偽就接著計算右邊。"or"操作符的作用相同但優(yōu)先度更低。 將包含 p(false || true) #=> true p((false or true)) #=> true not例: ! me not me i != you 語法: `!‘ 表達式 not 表達式 若表達式值為真就返回偽,若表達式值為偽則返回真。 表達式 `!=‘ 表達式 等同于 表達式 `!~‘ 表達式 等同于 將包含 p(! false) #=> true p((not false)) #=> true 條件操作符例: obj == 1 ? foo : bar 語法: 表達式1 ? 表達式2 : 表達式3 根據(jù)表達式1的結(jié)果,選擇返回表達式2或表達式3。它與 if 表達式1 then 表達式2 else 表達式3 end 完全相同。 |
|
來自: interguycn > 《ruby圖書館》