亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

direktori cari
Ruby用戶指南 3、開始 4、簡單的例子 5、字符串 6、正則表達式 7、數(shù)組 8、回到那些簡單的例子 9、流程控制 10、迭代器 11、面向?qū)ο笏季S 12、方法 13、類 14、繼承 15、重載方法 16、訪問控制 17、單態(tài)方法 18、模塊 19、過程對象 20、變量 21、全局變量 22、實變量 23、局部變量 24、類常量 25、異常處理:rescue 26、異常處理:ensure 27、存取器 28、對象的初始化 29、雜項 RGSS入門教程 1、什么是RGSS 2、開始:最簡單的腳本 3、數(shù)據(jù)類型:數(shù)字 4、數(shù)據(jù)類型:常量與變量 5、數(shù)據(jù)類型:字符串 6、控制語句:條件分歧語句 7、控制語句:循環(huán) 8、函數(shù) 9、對象與類 10、顯示圖片 11、數(shù)組 12、哈希表(關(guān)聯(lián)數(shù)組) 13、類 14、數(shù)據(jù)庫 15、游戲?qū)ο?/a> 16、精靈的管理 17、窗口的管理 18、活動指令 19、場景類 Programming Ruby的翻譯 Programming Ruby: The Pragmatic Programmer's Guide 前言 Roadmap Ruby.new 類,對象和變量 容器Containers,塊Blocks和迭代Iterators 標準類型 深入方法 表達式Expressions 異常,捕捉和拋出(已經(jīng)開始,by jellen) 模塊 基本輸入輸出 線程和進程 當(dāng)遭遇挫折 Ruby和它的世界 Ruby和Web開發(fā) Ruby Tk Ruby 和微軟的 Windows 擴展Ruby Ruby語言 (by jellen) 類和對象 (by jellen) Ruby安全 反射Reflection 內(nèi)建類和方法 標準庫 OO設(shè)計 網(wǎng)絡(luò)和Web庫 Windows支持 內(nèi)嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊 Ruby首頁 卷首語 Ruby的啟動 環(huán)境變量 對象 執(zhí)行 結(jié)束時的相關(guān)處理 線程 安全模型 正則表達式 字句構(gòu)造 程序 變量和常數(shù) 字面值 操作符表達式 控制結(jié)構(gòu) 方法調(diào)用 類/方法的定義 內(nèi)部函數(shù) 內(nèi)部變量 內(nèi)部常數(shù) 內(nèi)部類/模塊/異常類 附加庫 Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術(shù)語集 Ruby的運行平臺 pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
watak

操作符表達式

  • 賦值
    • 計算賦值
    • 多重賦值
  • 范圍表達式
  • and
  • or
  • not
  • 條件操作符

例:

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)用,但有的操作符被嵌入語言之中,無法進行再定義。

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

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

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

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

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

賦值

例:

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

語法:

變量 '=' 表達式
常數(shù) '=' 表達式
表達式`['expr..`]' '=' 表達式
表達式`.'標識符 '=' 表達式

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

  • 變量

    變量 `=' 表達式
    

    若左邊是變量的話,就將表達式的計算值代入其中。

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

    表達式1`[' 表達式2 ... `]' `=' 表達式n
    

    先計算表達式1得到一個對象,再把從表達式2到表達式n之間的這些表達式作為參數(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)用

    表達式1 `.' 標識符 `=' 表達式2
    

    計算表達式1得到一個對象,再以表達式2為參數(shù)來調(dià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
    

計算賦值

例:

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

語法:

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

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

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

這種賦值形式等同于

表達式1 = 表達式1 op 表達式2

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

表達式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

當(dāng)您想忽略方法調(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)先度更低。

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

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

or

例:

demo || die
demo or die

語法:

表達式 `||' 表達式
表達式 or 表達式

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

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

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

not

例:

! me
not me
i != you

語法:

`!' 表達式
not 表達式

若表達式值為真就返回偽,若表達式值為偽則返回真。

表達式 `!=' 表達式

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

表達式 `!~' 表達式

等同于!(表達式 =~ 表達式)

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

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

完全相同。


Artikel sebelumnya: Artikel seterusnya: