總結:Ruby中的@ % # $等各種千奇百怪的符號的含義等

來源:互聯網
上載者:User

初學RUBY時,一看各種稍微複雜一點的代碼時很容易被RUBY各種約定的表示方法搞暈,這整理一下 。


(若標識符首位是小寫字母或“_”,則該標識符就是局部變數或方法調用。)

(以大寫字母([A-Z])開始的標識符是常數、類名或者模組名)

以@開始的變數是執行個體變數,它屬於特定的對象。可以在類或子類的方法中引用執行個體變數。

若引用尚未被初始化的執行個體變數的話,其值為nil。Ruby的執行個體變數無須聲明,每個執行個體變數都是在第一次出現時動態加入對象。Ruby的執行個體變數通常在方法中定義類聲明——當在方法裡聲明執行個體變數時,該執行個體變數實際上屬於該方法所在類的執行個體,而不是屬於該方法。例如

class Apple         # 定義第一個方法         def info1             # 輸出執行個體變數@a             puts @a        end        # 定義第二個方法         def info2             # 為執行個體變數賦值             @a = "Hello";         end    end    # 建立Apple類執行個體     apple = Apple.new    # 調用方法     apple.info2     apple.info1  

以@@開始的變數是類變數。在類的定義中定義類變數,可以在類的特殊方法、執行個體方法等處對類變數進行引用/賦值:

class Foo  @@foo = 1  def bar    puts @@foo  endend

類變數與常數的區別如下。

  • 可以重複賦值(常數則會發出警告)
  • 不能在類的外部直接引用(在繼承類中則可以引用/賦值)

類變數與類的執行個體變數的區別如下。

  • 可在子類中引用/賦值
  • 可在執行個體方法中引用/賦值

可以把類變數看作一種被類、子類以及它們的執行個體所共用的全域變數。

class Foo  @@foo = 1endclass Bar < Foo  p @@foo += 1          # => 2endclass Baz < Bar  p @@foo += 1          # => 3end

  

模組中定義的類變數(模組變數)被所有包含該模組的類所共用。

module Foo  @@foo = 1endclass Bar  include Foo  p @@foo += 1          # => 2endclass Baz  include Foo  p @@foo += 1          # => 3end

  

以$開始的變數是全域變數,可以在程式的任何地方加以引用(因此需要特別留意)。全域變數無需變數聲明。引用尚未初始化的全域變數時,其值為 nil。

  

%標記法(百分比符號標記法):

%{String}  用於建立一個使用雙引號括起來的字串 
%Q{String} 用於建立一個使用雙引號括起來的字串 
%q{String} 用於建立一個使用單引號括起來的字串 
%r{String} 用於建立一個Regex字面值 
%w{String} 用於將一個字串以空白字元切分成一個字串數組,進行較少替換 
%W{String} 用於將一個字串以空白字元切分成一個字串數組,進行較多替換 
%s{String} 用於產生一個符號對象 
%x{String} 用於執行String所代表的命令 

"%05d" % 123 » "00123"

"%-5s: %08x" % [ "ID", self.id ] » "ID:200e1670"


# 用來調用一個方法,


*號:

若左邊最後一個運算式前帶*的話,則將右邊多餘的元素以數組的形式代入這個帶*的運算式中。若右邊沒有多餘元素的話,就把空數組代入其中。

*foo     = 1, 2, 3      # foo = [1, 2, 3]foo,*bar = 1, 2, 3      # foo = 1; bar = [2, 3]

 

*用在方法定義中表示可變長的變數:

【FROM “ProgrammingRuby”】

Variable-Length Argument Lists 

But what if you want to pass in a variable number of arguments, or want to capture multiple arguments into a single parameter? Placing an asterisk before the name of the parameter after the ``normal'' parameters does just that.

def varargs(arg1, *rest)    "Got #{arg1} and #{rest.join(', ')}"endvarargs("one") » "Got one and "varargs("one", "two") » "Got one and two"varargs "one", "two", "three" » "Got one and two, three"

 

irb(main):005:0> def call_back(*a)irb(main):006:1> a.each do |arg|irb(main):007:2*    puts  argirb(main):008:2> endirb(main):009:1> end=> nilirb(main):011:0> call_back(["hello",99])hello99=> [["hello", 99]]irb(main):012:0> call_back(["hello",99],"hello",99)hello99hello99=> [["hello", 99], "hello", 99]

  

  

其他用法:

C:\Users\Administrator>irb
irb(main):001:0> [1,2,3] * "hi"
=> "1hi2hi3"
irb(main):002:0> [1,2,3] * ";"
=> "1;2;3"
irb(main):003:0> [1,2,3] * 3
=> [1, 2, 3, 1, 2, 3, 1, 2, 3]
irb(main):004:0> "hi" * 3
=> "hihihi"

 


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.