校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > 簡(jiǎn)要解讀Ruby面向?qū)ο缶幊讨械淖饔糜?/div>

簡(jiǎn)要解讀Ruby面向?qū)ο缶幊讨械淖饔糜?/h1>

熱門(mén)標(biāo)簽:百度地圖標(biāo)注自定義圖片 電銷(xiāo)機(jī)器人廠商代理 常德電銷(xiāo)平臺(tái)外呼系統(tǒng)軟件價(jià)格 高德地圖標(biāo)注客服 湖州u友防封電銷(xiāo)卡 滴滴外呼系統(tǒng) 徐州網(wǎng)絡(luò)外呼系統(tǒng)哪個(gè)好 地圖標(biāo)注賺錢(qián)項(xiàng)目注冊(cè) 白銀外呼paas系統(tǒng)

作用域

Ruby中不具備嵌套作用域(即在內(nèi)部作用域,可以看到外部作用域的)的特點(diǎn),它的作用域是截然分開(kāi)的,一旦進(jìn)入一個(gè)新的作用域,原先的綁定會(huì)被替換為一組新的綁定。

程序會(huì)在三個(gè)地方關(guān)閉前一個(gè)作用域,同時(shí)打開(kāi)一個(gè)新的作用域,它們是:

  • 類(lèi)定義class
  • 模塊定義 module
  • 方法定義 def

上面三個(gè)關(guān)鍵字,每個(gè)關(guān)鍵字對(duì)應(yīng)一個(gè)作用域門(mén)(進(jìn)入),相應(yīng)的end則對(duì)應(yīng)離開(kāi)這道門(mén)。

扁平化作用域

從一個(gè)作用域進(jìn)入另一個(gè)作用域的時(shí)候,局部變量會(huì)立即失效,為了讓局部變量持續(xù)有效,可以通過(guò)規(guī)避關(guān)鍵字的方式,使用方法調(diào)用來(lái)代替作用域門(mén),讓一個(gè)作用域看到另一個(gè)作用域里的變量,從而達(dá)到目的。具體做法是,通過(guò)Class.new替代class,Module#define_method代替def,Module.new代替module。這種做法稱為扁平作用域,表示兩個(gè)作用域擠壓到一起。

示例代碼(Wrong)

my_var = “Success”
class MyClass
  puts my_var #這里無(wú)法正確打印”Success”
  def my_method
    puts my_var #這里無(wú)法正確打印”Success”
  end
end

示例代碼(Right)

my_var = “Success”
MyClass = Class.new do
  puts “#{my_var} in the class definition”
  define_method :my_method do
    “#{my_var} in the method”
  end
end

在一些語(yǔ)言中,比如java或C#,有內(nèi)部作用域(inner scope)的概念。在內(nèi)部作用域可以看到外部作用域(outer scope)中的變量。但ruby中沒(méi)有這種嵌套式作用域的概念,它的作用域是截然分開(kāi)的,一旦進(jìn)入一個(gè)新的作用域,原先的綁定就會(huì)被替代為一組新的綁定。

在ruby中,程序會(huì)在三個(gè)地方關(guān)閉前一個(gè)作用域,同時(shí)打開(kāi)一個(gè)新的作用域:類(lèi)定義、模塊定義、方法。

只要程序進(jìn)入類(lèi)、模塊或者方法的定義,就會(huì)發(fā)生作用域切換。這三個(gè)邊界分別用class,module和def關(guān)鍵字作為標(biāo)志,每一個(gè)關(guān)鍵字都充當(dāng)了一個(gè)作用域門(mén)(scope gate)。

怎樣讓綁定穿越一個(gè)作用域門(mén)呢?比如下面的代碼:

my_var = “hello”
class MyClass
     #你希望在這里能打印my_var
     def my_method
          #...還有這里
     end
end

在進(jìn)入另一個(gè)作用域時(shí),局部變量會(huì)立刻失效。如果把class關(guān)鍵字替換為某個(gè)非作用域門(mén)的東西,比如方法,就能在一個(gè)閉包中獲得my_var的值,并把這個(gè)閉包傳遞給該方法。代碼如下:

my_var = “hello”
MyClass = Class.new do
     puts “#{my_var} in the class definition”
     def my_method
          #...這里怎樣打印出來(lái)呢?
     end
end

用Module#define_method()方法可以替代def,代碼如下:

my_var = “hello”
MyClass = Class.new do
     puts “#{my_var} in the class definition”
     define_method :my_method do
          puts “#{my_var} in the method”
     end
end


 
MyClass.new.my_method

hello in the class definition
hello in the method

使用方法來(lái)替代作用域門(mén),可以讓一個(gè)作用域看到另一個(gè)作用域中的變量,這種技術(shù)可以稱之為“扁平作用域”。

共享作用域

將一組方法定義到,某個(gè)變量的扁平作用域中,可以保證變量?jī)H被有限的幾個(gè)方法所共享。這種方式稱為共享作用域。

您可能感興趣的文章:
  • Ruby面向?qū)ο缶幊讨蓄?lèi)的方法與類(lèi)的擴(kuò)展
  • Ruby面向?qū)ο缶幊讨蓄?lèi)與方法的基礎(chǔ)學(xué)習(xí)
  • Ruby的面向?qū)ο蠓绞骄幊虒W(xué)習(xí)雜記
  • Ruby的面向?qū)ο缶幊痰幕A(chǔ)教程
  • Ruby面向?qū)ο缶幊淘斀?/li>
  • ruby 面向?qū)ο笏季S 概念
  • Ruby 面向?qū)ο笾R(shí)總結(jié)

標(biāo)簽:公主嶺 永州 三沙 荊門(mén) 普洱 梧州 張家界 遼寧

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《簡(jiǎn)要解讀Ruby面向?qū)ο缶幊讨械淖饔糜颉罚疚年P(guān)鍵詞  簡(jiǎn)要,解讀,Ruby,面向,對(duì)象,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《簡(jiǎn)要解讀Ruby面向?qū)ο缶幊讨械淖饔糜颉废嚓P(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于簡(jiǎn)要解讀Ruby面向?qū)ο缶幊讨械淖饔糜虻南嚓P(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 四子王旗| 荆门市| 伊川县| 大余县| 哈尔滨市| 平利县| 奉化市| 从化市| 平潭县| 南江县| 台中市| 黔东| 皋兰县| 饶阳县| 承德县| 宁城县| 成武县| 襄垣县| 嫩江县| 常熟市| 铁力市| 昌江| 武穴市| 南投县| 阿拉善左旗| 乌审旗| 平远县| 雅安市| 大渡口区| 贵南县| 克东县| 福州市| 德阳市| 雷州市| 察雅县| 永新县| 武夷山市| 鸡泽县| 尉犁县| 嘉禾县| 元氏县|