一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語(yǔ)言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Ruby - 介紹Ruby中的模塊與混合類型的相關(guān)知識(shí)

介紹Ruby中的模塊與混合類型的相關(guān)知識(shí)

2020-04-28 10:05腳本之家 Ruby

這篇文章主要介紹了Ruby中的模塊與混合類型的相關(guān)知識(shí),包括平常人們常說(shuō)的多態(tài)與繼承等相關(guān)知識(shí)點(diǎn),需要的朋友可以參考下

模塊是組合在一起的方法,類和常量。模塊兩個(gè)主要好處:

  •     模塊提供了一個(gè)命名空間,并避免名稱沖突。
  •     模塊實(shí)現(xiàn)混合工廠。

模塊定義了一個(gè)命名空間,一個(gè)沙箱中方法和常量可以自由使用,而不必?fù)?dān)心踩到其他的方法和常數(shù)。
語(yǔ)法:

?
1
2
3
4
5
module Identifier
  statement1
  statement2
  ...........
end

就像被命名為類常量模塊中的常量,首字母大寫。定義的方法看起來(lái)很相似,模塊定義方法就像類的方法。

調(diào)用一個(gè)模塊方法和類方法一樣,通過模塊的名稱它名字前,引用一個(gè)常數(shù)使用該模塊的名稱和兩個(gè)冒號(hào)。
例子:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/ruby
 
# Module defined in trig.rb file
 
module Trig
  PI = 3.141592654
  def Trig.sin(x)
  # ..
  end
  def Trig.cos(x)
  # ..
  end
end

我們可以定義一個(gè)函數(shù)名相同,但在不同的功能模塊:

?
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/ruby
 
# Module defined in moral.rb file
 
module Moral
  VERY_BAD = 0
  BAD = 1
  def Moral.sin(badness)
  # ...
  end
end

和類的方法一樣,當(dāng)在一個(gè)模塊中定義的方法,指定模塊名稱后面跟著一個(gè)點(diǎn),那么該方法的名稱。
Ruby require 語(yǔ)句:

require 語(yǔ)句聲明的是類似于 C/C++ 的 include語(yǔ)句 和 Java 的 import 語(yǔ)句。如果有第三個(gè)程序要使用任何定義的模塊,它可以簡(jiǎn)單地使用Ruby require 語(yǔ)句加載的模塊文件:
語(yǔ)法:

require filename

在這里,它不是必需的  .rb 文件名擴(kuò)展。
例如:

?
1
2
3
4
5
require 'trig.rb'
require 'moral'
 
y = Trig.sin(Trig::PI/4)
wrongdoing = Moral.sin(Moral::VERY_BAD)

重要: 在這里,這兩個(gè)文件都包含相同的函數(shù)名。因此,這將導(dǎo)致在代碼中的歧義,同時(shí)包括在調(diào)用程序,但的模塊避免這個(gè)代碼模糊,我們能夠調(diào)用適當(dāng)?shù)墓δ苣K的名稱。
Ruby include 語(yǔ)句:

可以嵌入在一個(gè)類模塊。要在一個(gè)類中嵌入模塊,可以使用類中 include 語(yǔ)句:
語(yǔ)法:

include modulename

如果一個(gè)模塊被定義在單獨(dú)的文件,那么它需要包含該文件需要隱藏于公開的模塊在一個(gè)類的 require  語(yǔ)句之前。
例子:

考慮以下模塊寫在support.rb文件。

?
1
2
3
4
5
6
7
8
9
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

現(xiàn)在,可以在如下一類包括這個(gè)模塊:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/ruby
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

這將產(chǎn)生以下結(jié)果:

?
1
2
3
4
5
Sunday
You have four weeks in a month
You have 52 weeks in a year
Sunday
120

Ruby中混合類型:

通過本節(jié)之前,假設(shè)有面向?qū)ο蟮母拍詈椭R(shí)。

當(dāng)一個(gè)類可以從多個(gè)父類繼承的特點(diǎn),類應(yīng)該顯示多重繼承。

Ruby沒有直接中suppoprt多繼承,但Ruby的模塊有另一個(gè)精彩使用。他們幾乎消除多重繼承的需要,提供了一個(gè)工廠稱為混入。

混合類型給一個(gè)精彩的控制方式增加功能類。在代碼中混合類,使用它的代碼能進(jìn)行進(jìn)行交互。

讓我們來(lái)看看下面的示例代碼來(lái)獲得混合類型了解:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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。類示例包括兩個(gè)模塊A和B類的樣品可以訪問所有四種方法,即a1, a2, b1 或 b2。因此,可以看到這個(gè)類繼承自兩個(gè)模塊樣品。因此,可以說(shuō)類的示例顯示了多重繼承或混入。

延伸 · 閱讀

精彩推薦
  • RubyRuby迭代器的7種技巧分享

    Ruby迭代器的7種技巧分享

    這篇文章主要介紹了Ruby迭代器的7種技巧分享,Ruby中的迭代器非常人性化,本文既是講解了7個(gè)技巧也是講解了7種迭代器,需要的朋友可以參考下 ...

    腳本之家4782020-04-20
  • RubyRuby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem

    這篇文章主要介紹了Ruby環(huán)境下安裝使用bundler來(lái)管理多版本的gem的方法,舉了Ruby On Rails中的應(yīng)用實(shí)例來(lái)進(jìn)行演示,需要的朋友可以參考下 ...

    日拱一卒4332020-05-10
  • Ruby簡(jiǎn)要說(shuō)明Ruby中的迭代器

    簡(jiǎn)要說(shuō)明Ruby中的迭代器

    這篇文章主要介紹了Ruby中的迭代器,迭代器的概念在動(dòng)態(tài)語(yǔ)言的編程中十分重要,文章中介紹了Ruby中的each迭代器和collect迭代器,需要的朋友可以參考下 ...

    goldensun2772020-04-25
  • RubyRuby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表...

    范孝鵬2192020-05-07
  • RubyCentOS中配置Ruby on Rails環(huán)境

    CentOS中配置Ruby on Rails環(huán)境

    經(jīng)過一個(gè)上午的折騰,終于把ROR環(huán)境在CentOS中搞定,繞了很多彎路,把文章寫下來(lái)總結(jié)一下 ...

    可樂加糖4762020-04-12
  • RubyRuby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象

    這篇文章主要介紹了Ruby簡(jiǎn)潔學(xué)習(xí)筆記(一):字符串、數(shù)字、類和對(duì)象,本文是學(xué)習(xí)筆記第一篇,需要的朋友可以參考下 ...

    腳本之家2472020-04-20
  • RubyRuby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼

    Ruby進(jìn)行文件信息輸出實(shí)例代碼,數(shù)據(jù)是隨機(jī)的,所以每次的記錄都會(huì)不同。 ...

    ruby教程網(wǎng)2962020-04-10
  • Ruby剖析 Ruby 訪問控制

    剖析 Ruby 訪問控制

    前面,我們說(shuō) Ruby 沒有函數(shù),只有方法.而且實(shí)際上有不止一種方法.這一節(jié)我們介紹 訪問控制 (accesscontrols). 想想當(dāng)我們?cè)谧罡邔佣皇窃谝粋€(gè)類的定義里定義...

    ruby教程網(wǎng)3572020-04-08
主站蜘蛛池模板: 国产成人综合久久 | 卫生间被教官做好爽HH视频 | 俄罗斯美女大逼 | 日本哺乳期网站xxxx | 福利片成人午夜在线 | 奇米7777第四色 | 日本嫩小xxxxhd | 九九国产视频 | 手机免费在线视频 | 高h全肉动漫在线观看免费 高h辣h双处全是肉军婚 | 色五夜婷婷| 日本小网站 | 美女翘臀跪床被打屁股作文 | 出差上的少妇20p | 精品国产一区二区三区在线观看 | 公翁的舌尖研磨她的花蒂小说 | 特黄特色大片免费影院 | 潘金莲西门庆一级淫片aaaaaa | 深夜在线观看网站 | 天天天天天天天操 | 色噜噜狠狠色综合 | 四虎免费在线视频 | 亚洲视频在线观看地址 | 国产精品欧美亚洲韩国日本99 | 色老板美国在线观看 | 国产在线激情视频 | 日产乱码卡1卡2卡三卡四在线 | 国产卡一卡二卡3卡乱码免费 | h在线动漫 | 国产精品手机视频一区二区 | 504神宫寺奈绪大战黑人 | 国产趴着打光屁股sp抽打 | 亚洲成人影院在线 | 视频在线观看高清免费看 | 男人的天堂comwww | 午夜精品网 | 久久无码AV亚洲精品色午夜麻豆 | 国产午夜免费秋霞影院 | 性色老女人| 我和老丈洗澡同性 | 美女艹b|