国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Ruby參考手冊 - 操作符表達(dá)式

操作符表達(dá)式

例:

1+2*3/4

為了便于編程,有些方法調(diào)用和控制結(jié)構(gòu)是以操作符的形式出現(xiàn)的。Ruby語言中有下列操作符。

高     ::[]+(單項(xiàng))  !  ~**-(單項(xiàng))*  /  %+  -<< >>&|  ^> >=  < <=<=> ==  === !=  =~  !~&&||..  ...?:(條件操作符)=(+=, -= ... )not低     and or

左側(cè)的“高”和“低”表示操作符的優(yōu)先度。例如“&&”的優(yōu)先度要高于“||”,所以

a && b || c   #=> (a && b) || ca || b && c   #=>  a || (b && c)

大部分操作符都是些特殊形式的方法調(diào)用,但有的操作符被嵌入語言之中,無法進(jìn)行再定義。

  • 可再定義的操作符(方法):

    +@, -@表示單項(xiàng)操作符+, -,在方法定義等場合中可以使用這種表示法。

    |  ^  &  <=>  ==  ===  =~  >   >=  <   <=   <<  >>    +  -  *  /    %   **   ~   +@  -@  []  []=  `    
  • 不可再定義的操作符(控制結(jié)構(gòu)):

    由多個(gè)操作符組合而成的計(jì)算賦值操作符、“!=”以及“!~”是不能再定義的。

    =  ?:  ..  ...  !  not  &&  and  ||  or  ::    

賦值

例:

foo = barfoo[0] = barfoo.bar = baz

語法:

變量 ‘=‘ 表達(dá)式常數(shù) ‘=‘ 表達(dá)式表達(dá)式`[‘expr..`]‘ ‘=‘ 表達(dá)式表達(dá)式`.‘標(biāo)識符 ‘=‘ 表達(dá)式

我們使用賦值表達(dá)式向變量等對象進(jìn)行賦值。賦值也可以用作局部變量和常數(shù)的聲明。賦值表達(dá)式的左邊必須是下列之一。

  • 變量

    變量 `=‘ 表達(dá)式    

    若左邊是變量的話,就將表達(dá)式的計(jì)算值代入其中。

  • 數(shù)組調(diào)用

    表達(dá)式1`[‘ 表達(dá)式2 ... `]‘ `=‘ 表達(dá)式n    

    先計(jì)算表達(dá)式1得到一個(gè)對象,再把從表達(dá)式2到表達(dá)式n之間的這些表達(dá)式作為參數(shù),來調(diào)用該對象的"[]="方法。

    例:

    class C    def initialize    @ary = [0,1,2,3,4,5,6,7]    end    def [](i)    @ary[i * 2]    end    def []=( i, v )    @ary[i * 2] = v    end    end    c = C.new    p c[3]      # 變成 c.[]( 3 ), 結(jié)果為6    p c[3] = 1  # 變成 c.[]=(3,1),結(jié)果為1    
  • 屬性調(diào)用

    表達(dá)式1 `.‘ 標(biāo)識符 `=‘ 表達(dá)式2    

    計(jì)算表達(dá)式1得到一個(gè)對象,再以表達(dá)式2為參數(shù)來調(diào)用該對象的"標(biāo)識符="方法。

    例:

    class C    def foo    @foo    end    def foo=( v )    @foo = v    end    end    c = C.new    c.foo = 5   # 變成 c.foo=( 5 )    p c.foo     # => 5    

    還可以使用 attr 來定義屬性。

    例:

    class C    attr :foo, true    end    c = C.new    c.foo = 5   # 變成 c.foo=( 5 )    p c.foo     # => 5    

計(jì)算賦值

例:

foo += 12       # foo = foo + 12a ||= 1         # 若a為偽或者a尚未定義,就把1賦值給a。初始化時(shí)的一種習(xí)慣寫法。

語法:

表達(dá)式1 op= 表達(dá)式2     # 表達(dá)式1等同于普通賦值表達(dá)式左邊的部分

op就是下列中的某一個(gè)。操作符與=之間不留間隔。

+, -, *, /, %, **, &, |, ^, <<, >>, &&, ||

這種賦值形式等同于

表達(dá)式1 = 表達(dá)式1 op 表達(dá)式2

但是,當(dāng)op是“&&”或“||”時(shí)就會變成

表達(dá)式1 op (表達(dá)式1 = 表達(dá)式2)

這個(gè)樣子。例如在屬性調(diào)用時(shí)

obj.foo ||= true

就不能解釋成

obj.foo = obj.foo || true

而應(yīng)該是

obj.foo || (obj.foo = true)

這樣才對。(根據(jù)obj.foo結(jié)果的不同,有時(shí)就不能調(diào)用obj.foo=)

多重賦值

例:

foo, bar, baz = 1, 2, 3foo, = list()foo, *rest = list2()

語法:

表達(dá)式 [`,‘ [表達(dá)式 `,‘ ... ] [`*‘ [表達(dá)式]]] = 表達(dá)式 [, 表達(dá)式 ... ][`*‘ 表達(dá)式]`*‘ [表達(dá)式] = 表達(dá)式 [, 表達(dá)式 ... ][`*‘ 表達(dá)式]

多重賦值是指,在多個(gè)表達(dá)式以及數(shù)組中同時(shí)進(jìn)行的賦值。左邊的各個(gè)表達(dá)式必須是可以被賦值的。若右邊只有一個(gè)表達(dá)式時(shí),則將該表達(dá)式的計(jì)算值轉(zhuǎn)為數(shù)組后,再把數(shù)組中的各個(gè)元素依次賦值給左邊。若右邊數(shù)組元素的數(shù)量超過左邊的話,將忽略多余的數(shù)組元素。若右邊數(shù)組元素個(gè)數(shù)不足的話,將向左邊多余的元素中代入nil。

若左邊最后一個(gè)表達(dá)式前帶*的話,則將右邊多余的元素以數(shù)組的形式代入這個(gè)帶*的表達(dá)式中。若右邊沒有多余元素的話,就把空數(shù)組代入其中。

例:

foo, bar = [1, 2]       # foo = 1; bar = 2foo, bar = 1, 2         # foo = 1; bar = 2foo, bar = 1            # foo = 1; bar = nilfoo, bar, baz = 1, 2    # foo = 1; bar = 2; baz = nilfoo, bar = 1, 2, 3      # foo = 1; bar = 2foo      = 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)含的元素取出來進(jìn)行賦值。

(foo, bar), baz = [1, 2], 3       # foo = 1; bar = 2; baz = 3

還可以把特殊形式的賦值表達(dá)式轉(zhuǎn)化為多重代入。

class Cdef foo=( v )@foo = venddef []=(i,v)@bar = ["a", "b", "c"]@bar[i] = vendendobj = C.newobj.foo, obj[2] = 1, 2     # @foo = 1; @bar = ["a", "b", 2]

若左邊以","結(jié)尾或"*"后面沒有表達(dá)式時(shí),將忽略右邊多余的元素。

例:

foo,*    = 1, 2, 3      # foo = 1foo,     = 1, 2, 3      # foo = 1*        = 1, 2, 3

當(dāng)您想忽略方法調(diào)用中的所有參數(shù)時(shí),就可以使用這個(gè)"*"(方法調(diào)用中的參數(shù)在進(jìn)行交接時(shí),大體遵循多重代入的規(guī)則)。

例:

def foo(*)endfoo(1,2,3)

多重賦值的值變換為右邊的數(shù)組。

范圍表達(dá)式

例:

1 .. 20/first/  ...  /second/

語法:

表達(dá)式1 `..‘ 表達(dá)式2表達(dá)式1 ` ... ‘ 表達(dá)式2

如果不是出現(xiàn)在條件表達(dá)式中的話,它將返回從表達(dá)式1到表達(dá)式2的范圍對象。范圍對象是 Range 類的實(shí)例。使用"..."生成的范圍對象將不包括終點(diǎn)。

若它出現(xiàn)在條件表達(dá)式中時(shí),在表達(dá)式1變成真之前,它將一直返回偽。接下來,在表達(dá)式2返回真之前,它將一直返回真。一旦表達(dá)式2變?yōu)檎妫鼘⒅匦路祷貍?。使?.."時(shí),一旦表達(dá)式1返回真,馬上就會對表達(dá)式2進(jìn)行計(jì)算(就象awk)。而使用"..."時(shí),在進(jìn)行下個(gè)計(jì)算之前,一直都不會對表達(dá)式2進(jìn)行計(jì)算(就象sed)。

and

例:

test && settest and set

語法:

表達(dá)式 `&&‘ 表達(dá)式表達(dá)式 `and‘ 表達(dá)式

首先計(jì)算左邊,若結(jié)果為真就接著計(jì)算右邊。"and"操作符的作用相同但優(yōu)先度更低。

將包含and的表達(dá)式傳遞給某方法的參數(shù)時(shí),必須使用雙層括號。

p(true && false)    #=> falsep((true and false)) #=> false

or

例:

demo || diedemo or die

語法:

表達(dá)式 `||‘ 表達(dá)式表達(dá)式 or 表達(dá)式

首先計(jì)算左邊,若結(jié)果為偽就接著計(jì)算右邊。"or"操作符的作用相同但優(yōu)先度更低。

將包含or的表達(dá)式傳遞給某方法的參數(shù)時(shí),必須使用雙層括號。

p(false || true)    #=> truep((false or true)) #=> true

not

例:

! menot mei != you

語法:

`!‘ 表達(dá)式not 表達(dá)式

若表達(dá)式值為真就返回偽,若表達(dá)式值為偽則返回真。

表達(dá)式 `!=‘ 表達(dá)式

等同于!(表達(dá)式 == 表達(dá)式)。

表達(dá)式 `!~‘ 表達(dá)式

等同于!(表達(dá)式 =~ 表達(dá)式)。

將包含not的表達(dá)式傳遞給某方法的參數(shù)時(shí),必須使用雙層括號。

p(! false)      #=> truep((not false))  #=> true

條件操作符

例:

obj == 1 ? foo : bar

語法:

表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3

根據(jù)表達(dá)式1的結(jié)果,選擇返回表達(dá)式2或表達(dá)式3。它與

if 表達(dá)式1 then 表達(dá)式2 else 表達(dá)式3 end

完全相同。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
14 個(gè)折磨人的 JavaScript 面試題
每個(gè)前端開發(fā)者必會的 20 個(gè) JavaScript 面試題 – 碼農(nóng)網(wǎng)
談"this"
JavaScript 中的 this 全面解析
JavaScript 中的 this 并不難
jQuery學(xué)習(xí)筆記之JavaScript基礎(chǔ)語法篇
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服