Ruby程式設計語言_Chapter01_筆記

來源:互聯網
上載者:User
第一章 導言

  1. Ruby是完全物件導向的。

  2. Ruby的注釋以“#”開頭。

  3. Ruby在調用無參數方法的時候,通常省略括弧;而且Ruby只能通過方法訪問對象的內部狀態。

  4. 代碼塊和迭代器
    1) times和upto是整數對象實現的方法,是一種被稱為“迭代器(iterator)”的方法,類似於迴圈。“{}”中包含的代碼成為代碼塊(block)。

    3.times {print "Ruby! "}1.upto(9) {|n| print n}

    2) 數組(以及類似的“可枚舉的”對象)具有名為each的迭代器,它為每個元素調用一次相關聯的代碼塊;每次對代碼塊的調用都以該元素作為參數。

    a = [1, 2, 3]a.each do |n|    print n ** 2end

    3)其他迭代器

    • map 用於遍曆數組中的元素,執行代碼塊中的操作,並將代碼塊的傳回值置於map所返回的新數組中。
    • select 用於遍曆數組中的元素,執行代碼塊中的操作,如果返回判斷為true,則將該元素置於select所返回的新數組中。
    a = [1, 2, 3, 4]b = a.map {|n| n ** 2}# b = [1, 4, 9, 16]c = a.map {|n| print n}# c = [nil, nil, nil, nil]d = a.select {|n| n % 2 == 0}# d = [2, 4]e = a.select {"k"}# e = [1, 2, 3, 4]f = a.select {|n| print n}# f = []

    inject也都是

    4) 雜湊(hash)也是Ruby的基礎資料結構。與數組類似,以“[]”來存取元素值,不過hash是以鍵對象來作為索引。Hash類也定義了each迭代方法,此方法為每個索引值對調用一次代碼塊,並將鍵和值作為參數傳入代碼塊。
    Hash可以使用任何對象作為鍵,但是Symbol對象是最常用的。

    k = "key 01"    h = {    :one => 1,    :two => 2,    k => "Value 01"}        h[:one] = "ONE"p "h[k]=> '#{h[k]}'"        h.each do |k, v|    p "#{k}: #{v}" end

  5. 字串插入:雙引號中可以包含任何ruby運算式,但這些運算式必須包含在分界符#{和}裡。運算式的值通過to_s方法,轉化為字串代替原運算式。

    p "#{true}"# 列印出"true"p "#{false}"# 列印出"false"p "#{nil}"# 列印出""

  6. 運算式和操作符
    1)Ruby的文法是面向運算式的,諸如if類的控制結構其實也是運算式,也是具有值的。就很像三目運算子。

    m = if 2 > 1 then "y" else "n" end

    2)雖然Ruby所有語句都是運算式,但是並不是所有的語句都會返回有意義的值。比如while迴圈和方法定義通常都只返回nil。

    3)許多Ruby操作符都是作為方法來實現的,而且類可以從定義它們。但是不能定義全新的操作符,因為可識別的操作符是一個固定的集合。

    "Ruby! " * 3# "Ruby! Ruby! Ruby! ""Hello, %s! -- %d" % ["Ruby", 2011]# "Hello, Ruby! -- 2011"[1,2,3] << 5# [1, 2, 3, 5]"Hello, " << "Wolrd!"# "Hello, Wolrd!"

    4)[]是可以被重寫的最為強大的操作符之一。Array類的[]操作符就可以接受兩個參數,用來擷取數組的子數組或者片段。

  7. 方法
    1)def定義,返回最後一個運算式的值

    def cube(x)    x ** 3end

    2)如果定義在類或模組之外,則是一個全域函數,而不是一個方法。全域函數實際可以認為是Object類的私人方法。

    3)可以為類或對象專門定義方法,只要以類名或對象名為首碼即可。

    a = "Solana"def a.say()    p "I'm Solana!"enda.say

  8. 賦值
    1) 並行賦值

    x, y, z = 1, 3, 5# x=1; y=3; z=5x, y = y, x# 交換值a, b, c = [2, 4, 6]# a=2; b=4; c=6

    2)方法可以有多個傳回值,並行賦值很方便

    def calc(x)    [x**2, x**3]enda, b = calc(7)p a, b

    3) 以等號結尾的方法,Ruby允許以賦值操作的文法來調用它們。

    o.x=(1)o.x = 1

  9. 首碼尾碼標點符號
    1)尾碼
    尾碼?的方法,表示謂詞,返回Boolean值;比如Array的empty?方法。
    不帶!的方法,返回調用該方法的對象的一個修改過的拷貝;尾碼!的方法,則是一個可變方法,可以修改原對象。比如Array的sort和sort!方法。

    a = []b = [4,7,2,3,9,1]c = bp a.empty?b.sortp bb.sort!p c

    2)首碼$ 全域變數
    @ 執行個體變數
    @@ 類變數

  10. RegExp和Range都有字面量,都定義了==操作符來進行相等性測試,也都定義了===操作符來進行匹配性和從屬性測試。

    x = 3p case x    when 0...3: "0 <= x < 3"    when 3...6: "3 <= x < 6"    when 6..9: "6 <= x <= 9"    else "others"endusrname = "Gengv2007"p case usrname    when /^[a-z]/        "Started with lowercase letter."    when /^[A-Z]/        "Started with uppercase letter."    when /\d$/        "Started with number."end

    Ruby的case語句看起來是“非直落”的。

  11. 類是一些相關方法的集合,這些方法操作一個對象的狀態,一個對象的狀態被儲存在它的執行個體變數中(@開頭的變數)。

  12. Ruby的字串是可變的,[]=操作符可以改變字串中的字元,或者插入、刪除、替換子字串;<<操作符可以再字串後面追加內容。

  13. 字串是可變的,所以再迴圈中包含一個字串字面量,每次迴圈都會為它建立新的對象。通過在字串(或其他任何對象)上調用freeze方法,可以防止對該對象的任何改變。

  14. 條件和迴圈(如if、while)的判斷運算式不一定非得是true或false;nil被當成false來處理,其他任何值(比如0或者"")都被當成true。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.