麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Ruby > 正文

解讀Ruby面向對象編程中的作用域

2020-02-24 15:37:04
字體:
來源:轉載
供稿:網友

作用域是面向對象編程中非常重要的概念,我們在構建程序時,必須要清楚地理解類和對象的范圍,接下來武林技術頻道小編為你解讀Ruby面向對象編程中的作用域。

作用域

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

程序會在三個地方關閉前一個作用域,同時打開一個新的作用域,它們是:

  • 類定義class
  • 模塊定義 module
  • 方法定義 def

上面三個關鍵字,每個關鍵字對應一個作用域門(進入),相應的end則對應離開這道門。

扁平化作用域

從一個作用域進入另一個作用域的時候,局部變量會立即失效,為了讓局部變量持續有效,可以通過規避關鍵字的方式,使用方法調用來代替作用域門,讓一個作用域看到另一個作用域里的變量,從而達到目的。具體做法是,通過Class.new替代class,Module#define_method代替def,Module.new代替module。這種做法稱為扁平作用域,表示兩個作用域擠壓到一起。

示例代碼(Wrong)

ruby;">my_var = “Success”class MyClass  puts my_var #這里無法正確打印”Success”  def my_method    puts my_var #這里無法正確打印”Success”  endend

示例代碼(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”  endend

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

在ruby中,程序會在三個地方關閉前一個作用域,同時打開一個新的作用域:類定義、模塊定義、方法。

只要程序進入類、模塊或者方法的定義,就會發生作用域切換。這三個邊界分別用class,module和def關鍵字作為標志,每一個關鍵字都充當了一個作用域門(scope gate)。

怎樣讓綁定穿越一個作用域門呢?比如下面的代碼:

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

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

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

用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”     endend MyClass.new.my_method
hello in the class definitionhello in the method
使用方法來替代作用域門,可以讓一個作用域看到另一個作用域中的變量,這種技術可以稱之為“扁平作用域”。

共享作用域

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

本文是武林技術頻道網解讀Ruby面向對象編程中的作用域,大家了解了嗎?更多是程序知識,武林技術頻道將為大家一一呈現。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 电影一级毛片 | 神秘电影91 | 成人做爰高潮片免费视频韩国 | 成人毛片100免费观看 | 91av久久| 精品一区二区久久久久久久网精 | 日韩色视频在线观看 | 国产麻豆久久 | 日韩精品中文字幕一区二区 | 免费男女视频 | 禁漫天堂久久久久久久久久 | 久久久久久久久久综合 | 日韩欧美电影一区二区三区 | 欧美日韩在线视频一区二区 | 精品国产乱码久久久久久丨区2区 | 羞羞草视频 | 欧美一级在线看 | 久久亚洲第一 | 成年人国产视频 | 性生活视频网站 | 亚洲国产综合在线观看 | 99re色| 色综合欧美 | 一区二区三区日韩在线 | 久久久久久久一区二区三区 | 日本视频免费观看 | 性欧美xxxx免费岛国不卡电影 | 国产精品av久久久久久无 | 人人舔人人射 | 污黄视频在线观看 | 久久sp| 欧美一级棒 | 国产精品一区在线看 | av色偷偷 | 国产精品成人久久 | 久久骚 | 久成人 | 午夜视频在线看 | 大逼逼影院| 国产一区二区高清在线 | 精品无吗乱吗av国产爱色 |