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

annuaire recherche
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、哈希表(關聯(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) 模塊 基本輸入輸出 線程和進程 當遭遇挫折 Ruby和它的世界 Ruby和Web開發(fā) Ruby Tk Ruby 和微軟的 Windows 擴展Ruby Ruby語言 (by jellen) 類和對象 (by jellen) Ruby安全 反射Reflection 內(nèi)建類和方法 標準庫 OO設計 網(wǎng)絡和Web庫 Windows支持 內(nèi)嵌文檔 交互式Ruby Shell 支持 Ruby參考手冊 Ruby首頁 卷首語 Ruby的啟動 環(huán)境變量 對象 執(zhí)行 結束時的相關處理 線程 安全模型 正則表達式 字句構造 程序 變量和常數(shù) 字面值 操作符表達式 控制結構 方法調(diào)用 類/方法的定義 內(nèi)部函數(shù) 內(nèi)部變量 內(nèi)部常數(shù) 內(nèi)部類/模塊/異常類 附加庫 Ruby變更記錄 ruby 1.6 特性 ruby 1.7 特性 Ruby術語集 Ruby的運行平臺 pack模板字符串 sprintf格式 Marshal格式 Ruby FAQ Ruby的陷阱
personnages

方法調(diào)用

  • super
  • 帶塊的方法調(diào)用
  • yield

例:

foo.bar()
foo.bar
bar()
print "hello world\n"
print
Class::new

語法:

[表達式  `.'] 標識符 [`(' 表達式 ... [`*' [表達式]],[`&' 表達式] `)']
[表達式 `::'] 標識符 [`(' 表達式 ... [`*' [表達式]],[`&' 表達式] `)']

方法調(diào)用表達式表示調(diào)用被調(diào)(receiver,"."左側表達式的值)的方法。若未指定被調(diào),則調(diào)用self的方法。

"."與"::"的意義大體相同。但表示常數(shù)時,必須使用"::"(例:Math::PI,Errno::ERANGE)。若寫成

Klass::Foo

的話,通常會被認為是常數(shù)。請注意,通常是將"::"用作類方法的調(diào)用。若方法名是以大寫字母開始的時候,要寫成

Klass.Foo

或者寫成

Klass::Foo()

但要用括號顯式地表明這是方法調(diào)用。

方法名中除了通常的標識符以外,還可以添加"?"或"!"等后綴。通常在布爾型(返回真或偽的方法)方法名后添加"?",在比同名(無"!")方法更具破壞性的方法名(例:tr和tr!)后添加"!"。

若最后一個參數(shù)帶"*"的話,將會先展開該參數(shù)的值,然后才傳遞。也就是:

foo(1,*[2,3,4])
foo(1,*[])

和下例

foo(1,2,3,4)
foo(1)

等效。

若最后一個參數(shù)帶"&",則該參數(shù)指定的過程對象(Proc)以及方法對象(Method)等會被當作一個塊傳遞給方法。詳情請參考迭代器。

方法調(diào)用時,private方法只能用函數(shù)形式(省略被調(diào)的形式)來調(diào)用。而protected方法只能在擁有該方法的對象的方法定義表達式內(nèi)進行調(diào)用。(請參考方法調(diào)用的限制)

super

例:

super
super(1,2,3)

語法:

super
super(表達式, ... )

super將調(diào)用被當前方法覆蓋的父類中的同名方法。若省略括號和參數(shù)時,將會把當前方法的參數(shù)原封不動地傳遞給父類中的同名方法。若調(diào)用時不想使用參數(shù)的話,請使用括號顯式地標出,像super()這樣。

例:

class Foo
  def foo(arg=nil)
    p arg
  end
end

class Bar < Foo
  def foo(arg)
    super(5)       # 以5作為參數(shù)進行調(diào)用
    super(arg)     # 以5作為參數(shù)進行調(diào)用
    super          # 以5作為參數(shù)進行調(diào)用,super(arg)的簡寫
    arg = 1
    super          # 以1作為參數(shù)進行調(diào)用,super(arg)的簡寫
    super()        # 無參數(shù)的調(diào)用
  end
end
Bar.new.foo 5

帶塊的方法調(diào)用

例:

[1,2,3].each do |i| print i*2, "\n" end
[1,2,3].each {|i| print i*2, "\n" }

語法:

method(arg1, arg2, ...)  do [`|' 表達式 ... `|'] 表達式 ... end
method(arg1, arg2, ...) `{' [`|' 表達式 ... `|'] 表達式 ... `}'
method(arg1, arg2, ..., `&' proc_object)

所謂帶塊的方法是指,為了對控制結構進行抽象化而設計的方法。最初常用于對循環(huán)進行抽象化,所以有時也叫迭代器。將do...end或{...}中的代碼片段(也就是塊)添加在方法后面,然后再調(diào)用該方法時,就能從該方法內(nèi)部對快進行計算。在帶塊的方法內(nèi)進行塊調(diào)用時使用 yield 表達式。傳給yield的值會被賦值給夾在"||"中的變量。

{...}比do...end塊的結合能力強。例如:

foobar a, b do .. end   # foobar 是帶塊的方法
foobar a, b { .. }      # b    成了帶塊的方法

塊中首次被賦值(聲明)的局部變量的作用域僅限于該塊。例如:

foobar {
  i = 20                # 聲明了局部變量i
   ...
}
print defined? i        # 此處的i尚未定義,false
foobar a, b do
  i = 11                # 聲明了一個新變量i
   ...
end

如下所示,在塊外仍然有效。

i = 10
[1,2,3].each do |m|
  p i * m               # 馬上就能使用i
end

還可以把過程對象( Proc )當作塊傳遞給帶塊的方法。這時要在過程對象名前面添加"&",并把該過程對象傳遞給帶塊的方法的最后一個參數(shù)。除了過程對象以外,還可以傳遞方法對象( Method )。這時將生成一個調(diào)用該方法的過程對象,然后把這個過程對象傳給帶塊的方法。

pobj = proc {|v|
  p v
}

[1,2,3].each(&pobj)
=> 1
   2
   3

ruby 1.7 特性: 在version 1.7中,若該對象自帶to_proc方法的話,就可以把它當作帶"&"的參數(shù)傳給帶塊方法(默認狀態(tài)下,Proc、Method對象都有to_proc方法)。方法調(diào)用時會執(zhí)行to_proc,它將返回Proc對象。

class Foo
  def to_proc
    Proc.new {|v| p v}
  end
end

[1,2,3].each(&Foo.new)

=> 1
   2
   3

帶塊方法的返回值與通常的方法是一樣的。若塊中的 break 引起中斷時,將返回nil。 ruby 1.7 特性 :若break帶參數(shù)的話,該參數(shù)的值就是帶塊方法的返回值。

yield

例:

yield data

語法:

yield `(' [表達式 [`,' 表達式 ... ]] `)'
yield [表達式 [`,' 表達式 ... ]]

把參數(shù)傳給塊之后,對塊進行計算。因為yield定義迭代器,所以是在方法定義內(nèi)使用。

def foo
  yield(1,2)
end

foo {|a,b| p [a,b]}

對塊參數(shù)進行賦值時遵從多重賦值規(guī)律。若執(zhí)行yield時,方法并沒有帶塊(不是迭代器)的話,就會引發(fā) LocalJumpError 異常。

yield將會返回塊內(nèi)最后被計算的表達式的值。若因 next 引起塊的運行中斷的話,返回nil。

ruby 1.7 特性 :若next帶參數(shù)的話,該參數(shù)的值就是yield的返回值。

ruby 1.8 特性 :關于塊參數(shù)的交付問題,以后可能會對下述內(nèi)容進行變更(會發(fā)出警告)。

def foo
  yield 1,2,3
end

foo {|v| p v}

# => -:5: warning: multiple values for a block parameter (3 for 1)
     [1, 2, 3]

應該寫成

yield [1,2,3]

或者

foo {|*v| p v}

這樣才對。雖然現(xiàn)在使用

v = 1,2,3

這樣的多重賦值還不會有警告,但最好不要使用。


Article précédent: Article suivant: