多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2

ruby教程

Ruby 模塊(Module)

閱讀 (2110)

Ruby 模塊(Module)

模塊(Module)是一種把方法、類和常量組合在一起的方式。模塊(Module)為您提供了兩大好處。

  • 模塊提供了一個命名空間和避免名字沖突。
  • 模塊實現了 mixin 裝置。

模塊(Module)定義了一個命名空間,相當于一個沙盒,在里邊您的方法和常量不會與其他地方的方法常量沖突。

模塊類似與類,但有一下不同:

  • 模塊不能實例化
  • 模塊沒有子類
  • 模塊只能被另一個模塊定義
module Identifier
   statement1
   statement2
   ...........
end

模塊常量命名與類常量命名類似,以大寫字母開頭。方法定義看起來也相似:模塊方法定義與類方法定義類似。

通過類方法,您可以在類方法名稱前面放置模塊名稱和一個點號來調用模塊方法,您可以使用模塊名稱和兩個冒號來引用一個常量。

實例

#!/usr/bin/ruby

# 定義在 trig.rb 文件中的模塊

module Trig
   PI = 3.141592654
   def Trig.sin(x)
   # ..
   end
   def Trig.cos(x)
   # ..
   end
end

我們可以定義多個函數名稱相同但是功能不同的模塊:

#!/usr/bin/ruby

# 定義在 moral.rb 文件中的模塊

module Moral
   VERY_BAD = 0
   BAD = 1
   def Moral.sin(badness)
   # ...
   end
end

就像類方法,當您在模塊中定義一個方法時,您可以指定在模塊名稱后跟著一個點號,點號后跟著方法名。

Ruby require 語句

require 語句類似于 C 和 C++ 中的 include 語句以及 Java 中的 import 語句。如果一個第三方的程序想要使用任何已定義的模塊,則可以簡單地使用 Ruby require 語句來加載模塊文件:

語法

require filename

在這里,文件擴展名 .rb 不是必需的。

實例

$LOAD_PATH << '.'

require 'trig.rb'
require 'moral'

y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)

在這里,我們使用 $LOAD_PATH << '.' 讓 Ruby 知道必須在當前目錄中搜索被引用的文件。如果您不想使用 $LOAD_PATH,那么您可以使用 require_relative 來從一個相對目錄引用文件。

注意:在這里,文件包含相同的函數名稱。所以,這會在引用調用程序時導致代碼模糊,但是模塊避免了這種代碼模糊,而且我們可以使用模塊的名稱調用適當的函數。

Ruby include 語句

您可以在類中嵌入模塊。為了在類中嵌入模塊,您可以在類中使用 include 語句:

語法

include modulename

如果模塊是定義在一個單獨的文件中,那么在嵌入模塊之前使用 require 語句引用該文件時必需的。

實例

假設下面的模塊寫在 support.rb 文件中。

module Week
   FIRST_DAY = "Sunday"
   def Week.weeks_in_month
      puts "You have four weeks in a month"
   end
   def Week.weeks_in_year
      puts "You have 52 weeks in a year"
   end
end

現在,您可以在類中引用該模塊,如下所示:

#!/usr/bin/ruby
$LOAD_PATH << '.'
require "support"

class Decade
include Week
   no_of_yrs=10
   def no_of_months
      puts Week::FIRST_DAY
      number=10*12
      puts number
   end
end
d1=Decade.new
puts Week::FIRST_DAY
Week.weeks_in_month
Week.weeks_in_year
d1.no_of_months

這將產生以下結果:

Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120

Ruby 中的 Mixins

在閱讀本節之前,您需要初步了解面向對象的概念。

當一個類可以從多個父類繼承類的特性時,該類顯示為多重繼承。

Ruby 不直接支持多重繼承,但是 Ruby 的模塊(Module)有另一個神奇的功能。它幾乎消除了多重繼承的需要,提供了一種名為 mixin 的裝置。

Mixins 向您提供了一種完美的為類添加功能的控制方式。但是,它們真正的強大在于當 mixin 中的代碼開始與使用它的類中的代碼交互時。

讓我們看看下面的示例代碼,深入了解 mixin:

module A
   def a1
   end
   def a2
   end
end
module B
   def b1
   end
   def b2
   end
end

class Sample
include A
include B
   def s1
   end
end

samp=Sample.new
samp.a1
samp.a2
samp.b1
samp.b2
samp.s1

  • 模塊 A 由方法 a1 和 a2 組成。
  • 模塊 B 由方法 b1 和 b2 組成。
  • 類 Sample 包含了模塊 A 和 B。
  • 類 Sample 可以訪問所有四個方法,即 a1、a2、b1 和 b2。
  •     因此,您可以看到類 Sample 繼承了兩個模塊,您可以說類 Sample 使用了多重繼承或 mixin 

關閉
程序員人生
主站蜘蛛池模板: 欧美末成年videos在线 | 99一级毛片| 国产不卡精品一区二区三区 | 中文字幕一区二区三区在线播放 | 久久七国产精品 | 被公侵犯肉体中文字幕一区二区 | 国产区亚洲区 | 无夜精品久久久久久 | 久久精品中文字幕极品 | 欧美成人一区二区三区不卡视频 | 伊人影院99| 性生生活网站免费 | 日本性欧美 | 国产日韩一区二区 | 日本乱人伦片中文三区 | 国产国语一级a毛片高清视频 | 日本二区| 精品久久久久久久一区二区手机版 | 交性大片欧美网 | 最新国产在线视频 | 国产成+人+综合+亚洲不卡 | 成人区视频爽爽爽爽爽 | 波多野结衣一区二区三区高清在线 | 福利二区视频 | 欧美成人综合在线观看视频 | 91福利一区二区三区 | 动漫网站在线观看 | 91欧美精品综合在线观看 | 成年人免费看的视频 | 精品少妇一区二区三区视频 | 欧美日韩性视频一区二区三区 | 亚洲大片在线观看 | 波多野结衣中文字幕在线播放 | 久久就是精品 | 欧美一区二区三区东南亚 | 欧美另类videosbestsex日本 | 欧美一级特黄毛片免费 | 在线视频一本 | 国内精品视频在线观看 | 亚洲 欧美 成人 | 羞羞网站免费 |