婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Ruby 中的 module_function 和 extend self異同

Ruby 中的 module_function 和 extend self異同

熱門標(biāo)簽:買了外呼系統(tǒng)不想用了怎么辦 開封百應(yīng)電銷機(jī)器人聯(lián)系方式 武漢呼叫中心外呼系統(tǒng)線路商 浦東上海400開頭的電話申請 樂昌電話機(jī)器人 真人語音電銷機(jī)器人系統(tǒng) 邯鄲外呼調(diào)研線路 電話機(jī)器人電話卡封號怎么辦 北京語音電銷機(jī)器人價格

在閱讀開源的 Ruby 代碼和編寫可維護(hù)性的代碼經(jīng)常遇到這兩者的使用,那么他們兩者的共同點(diǎn)和區(qū)別是什么呢?

module_function

Ruby 的 module 是 method 和 constants 的集合。module 中的method 又可分為 instance method 和 module method, 當(dāng)一個 module 被 include 進(jìn)一個 class ,那么 module 中的 method (注:沒有被 module_function 標(biāo)記的 method)就是 class 中的 instance method, instance method 需要所在的 class 被實(shí)例化之后才能被調(diào)用;被 module_function 標(biāo)記的 method(不管該 method 是 public 或者 private)就是 module method 且 instance method 也會變成 private method,對于被 include 所在的 class 來說是 private method,object.module_name 會出錯。module method 都能被 module_name.method_name 調(diào)用,沒有被 module_function 標(biāo)記的 public method 不能被 module_name.method_name 調(diào)用。

module 中的 module_function 會把 module 中的 method 變成 module method 且對于被 include 所在的 class 來說,module method 在 module 中是 private method 故 module_name.module_method 能調(diào)用,而不能被 object.module_name 調(diào)用。

module 中的 public method 對于被 include 所在的 class 來說是 instance method,故 object.public_method_in_module 能調(diào)用。如果想要非 module method 能夠被 module 調(diào)用(module_name.not_module_method) ,需要引入 extend self (下文會討論 extend self)

# test.rb
module MyModule
 def public_meth
  p "a public method, if the module is included to a class , can be call as object.public_meth"
 end
 def module_method
  p "a module method,can be called as module_name.module_method. but can not be call as object.module_method"
 end
 private
 def private_method_to_module_function
  p "a private_method, but can be call as module_name.module_method, because it was assigned to module_function"
 end
 def private_method
  p "I am a private method"
 end
 module_function :module_method, :private_method_to_module_function
end

MyModule.module_method
MyModule.private_method_to_module_function
begin
 MyModule.public_meth
rescue
 p "public method can not be called by module_name.public_meth"
end
begin
 MyModule.private_method
rescue NoMethodError
 p "private method can not be called by module_name.module_method"
end

class MyClass
 include MyModule
end

obj = MyClass.new
obj.public_meth

begin
 obj.private_method
rescue NoMethodError
 p "private method in module can not be call by object.method_name"
end

begin
 obj.module_method
rescue NoMethodError
 p "module method can not be called by object.method_name, for object, module method is private instance method"
end

#調(diào)用
ruby test.rb
"a module method,can be called as module_name.module_method. but can not be call as object.module_method"
"a private_method, but can be call as module_name.module_method, because it was assigned to module_function"
"public method can not be called by module_name.public_meth"
"private method can not be called by module_name.module_method"
"a public method, if the module is included to a class , can be call as object.public_meth"
"private method in module can not be call by object.method_name"
"module method can not be called by object.method_name, for object, module method is private instance method"

總結(jié)就是

•The method will be copied to class' singleton class
•The instance method's visibility will become private

extend self

Include is for adding methods to an instance of a class and extend is for adding class methods

extend 本質(zhì)是給 class 或者 module 添加 class method

extend self 讓 module 中的 instance method 能夠被 module_name.instance_method 調(diào)用,保留 module 中原本 method 的 public 或 private 屬性,但又不像 module_function 一樣把被標(biāo)記的 method 變成 private 。

#!/usr/bin/env ruby
# encoding: utf-8
# test_extend.rb
module MyModule
 extend self
 def public_meth
  p "a public_method extended by self can be called by module_name.public_meth and object.public_meth, included by a class"
  private_method
 end
 private
 def private_method
  p "a private method, can be call in module internal"
 end
end

class MyClass
 include MyModule
end

MyModule.public_meth

begin
 MyModule.private_method
rescue NoMethodError
 p "private method in extend self module can not be called module_name.private_method"
end

obj = MyClass.new
obj.public_meth

begin
 obj.private_method
rescue NoMethodError
 p "private method can not be called by object.private_method"
end

# 調(diào)用 ruby test_extend.rb
"a public_method extended by self can be called by module_name.public_meth and object.public_meth, included by a class"
"a private method, can be call in module internal"
"private method in extend self module can not be called module_name.private_method"
"a public_method extended by self can be called by module_name.public_meth and object.public_meth, included by a class"
"a private method, can be call in module internal"
"private method can not be called by object.private_method"

總結(jié)就是:
•No method copying involved
•No changes to method visibility

總結(jié)

module_function 改變 module 內(nèi) 原來 method 的 public/private 屬性并把改 method 變成 module method ,能夠被 module_name.module_method 調(diào)用。

extend self 就是在 module 自繼承,不改變 module 中 method 的 public/private 屬性,能夠被 module_name.public_method

您可能感興趣的文章:
  • Ruby中require、load、include、extend的區(qū)別介紹

標(biāo)簽:松原 宜春 鄂州 自貢 石嘴山 淄博 河北 六安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ruby 中的 module_function 和 extend self異同》,本文關(guān)鍵詞  Ruby,中的,module,function,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Ruby 中的 module_function 和 extend self異同》相關(guān)的同類信息!
  • 本頁收集關(guān)于Ruby 中的 module_function 和 extend self異同的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一本大道久久a久久精二百 | 国产精品乱码一区二区三区软件 | 亚洲欧美日韩久久| 日韩午夜激情av| 亚洲综合视频网| 免费精品99久久国产综合精品| 国产经典欧美精品| 欧美激情在线一区二区| 一区二区三区四区乱视频| 亚洲va韩国va欧美va| 久久99精品国产.久久久久久| 欧美mv和日韩mv的网站| 欧美激情一区二区三区不卡| 精品久久久久久久一区二区蜜臀| 久久 天天综合| 欧美日韩一区二区三区不卡| 国产日产欧美一区| av在线免费不卡| 久久九九久久九九| 一区二区三区在线观看网站| 久久国产精品99精品国产| 中文字幕国产一区二区| 国产精品一二三四五| 欧美精品在线一区二区| 国产在线精品一区在线观看麻豆| 欧美日韩精品综合在线| 国产精品丝袜91| 欧美视频精品在线观看| 日本欧美一区二区| 日本黄色一区二区| 国产精品的网站| av不卡一区二区三区| 欧美日韩一区在线观看| 亚洲欧美一区二区三区久本道91 | 麻豆国产一区二区| 在线欧美一区二区| 日日欢夜夜爽一区| 亚洲国产综合91精品麻豆| 久久激五月天综合精品| 国内偷窥港台综合视频在线播放| 国产iv一区二区三区| 五月婷婷久久综合| 在线观看亚洲精品视频| 精品国产第一区二区三区观看体验| 国产精品一区二区久久不卡| 欧美精品一区二区三区蜜桃视频| 婷婷国产在线综合| 欧美影院午夜播放| 丰满少妇久久久久久久| 国产精品久久久久一区二区三区 | 国产精品麻豆99久久久久久| 丝袜诱惑亚洲看片| 日本久久精品电影| 天堂久久一区二区三区| 精品视频123区在线观看| 18成人在线观看| 国产精品福利电影一区二区三区四区| 成人性生交大片免费看在线播放| 久久人人超碰精品| 中文字幕在线一区免费| 精品国产免费视频| 狠狠色丁香久久婷婷综| 成人精品视频一区二区三区尤物| 毛片基地黄久久久久久天堂| 日韩精品一区二区在线观看| 久久国产精品色| 久久老女人爱爱| 日韩精品中文字幕一区二区三区 | 久久精品国产99久久6| 日韩精品一区二区三区视频在线观看 | 婷婷国产在线综合| 91成人免费在线视频| 国产成人自拍网| 韩国女主播成人在线观看| 亚洲chinese男男1069| 亚洲自拍偷拍麻豆| 亚洲成在线观看| 午夜精品福利一区二区三区蜜桃| 亚洲男同性恋视频| 亚洲国产精品一区二区尤物区| 亚洲欧美精品午睡沙发| 亚洲在线免费播放| 免费成人结看片| 国产一区二区三区综合| 波多野结衣中文一区| 波多野结衣欧美| 欧美制服丝袜第一页| 日韩一区二区在线观看视频 | 26uuu欧美| 欧美激情在线一区二区三区| 亚洲人成在线观看一区二区| 亚洲成人福利片| 蜜臀av性久久久久蜜臀aⅴ| 韩国视频一区二区| 91美女福利视频| 日韩午夜在线影院| 国产精品女人毛片| 午夜婷婷国产麻豆精品| 另类小说欧美激情| 1024成人网| 国产精品99久久久久久久女警| 久久久综合网站| 国产一区二三区| 国产精品色眯眯| 91视频你懂的| 一个色在线综合| 欧美一级日韩一级| 国产在线视频一区二区| 国产日产欧美一区二区视频| 成人短视频下载| 亚洲中国最大av网站| 欧美日韩国产综合一区二区| 三级不卡在线观看| 337p日本欧洲亚洲大胆精品 | 午夜精品免费在线| 欧美夫妻性生活| 欧美aaaaaa午夜精品| 欧美一级午夜免费电影| 国产精品主播直播| 亚洲精品视频一区| 精品免费日韩av| 高清国产一区二区| 国产一区二区不卡在线| 风间由美一区二区三区在线观看 | 亚洲婷婷综合久久一本伊一区| 亚洲国产精品成人久久综合一区 | 欧美精品久久天天躁| 国产日产欧美一区| 亚洲国产另类精品专区| 在线不卡中文字幕| av资源网一区| 91精品国产综合久久久蜜臀粉嫩| 极品尤物av久久免费看| 一区二区三区日韩在线观看| 亚洲视频一区二区在线| 一区二区三区在线高清| 91麻豆精品国产91久久久更新时间 | 337p日本欧洲亚洲大胆色噜噜| 国产精品99久久久久久久vr| 一区二区成人在线观看| 久久日韩精品一区二区五区| 在线一区二区视频| 国产很黄免费观看久久| 日韩国产欧美在线观看| 成人免费视频免费观看| 欧美mv日韩mv国产网站app| 一区二区中文视频| 国产精品自在在线| 中文字幕一区二区三区精华液| 一区二区三区中文字幕精品精品| 国产a视频精品免费观看| 欧美性感一区二区三区| 欧美精品一区二区三区在线播放| 91浏览器在线视频| 国产真实乱对白精彩久久| 亚洲电影视频在线| 99久久婷婷国产| 国产精品乱人伦| 色综合久久中文综合久久97| 亚洲国产成人精品视频| 555夜色666亚洲国产免| 久久成人综合网| 国产精品美女久久久久久久网站| 91麻豆自制传媒国产之光| 欧美一区二区三区免费观看视频| 亚洲成av人片在线观看| 精品国产91乱码一区二区三区| 国产东北露脸精品视频| 亚洲精品国产精品乱码不99| 欧美日韩国产一级二级| 精品在线播放免费| 亚洲欧洲精品一区二区三区不卡 | 国产在线视频不卡二| 亚洲摸摸操操av| 欧美一区三区二区| 成人涩涩免费视频| 午夜精品久久一牛影视| 国产日产欧产精品推荐色| 日本韩国精品在线| 国产曰批免费观看久久久| 亚洲在线中文字幕| 国产女主播在线一区二区| 在线不卡a资源高清| 成人黄色在线看| 麻豆精品视频在线观看免费| 亚洲精品久久久久久国产精华液| 精品国产伦理网| 另类调教123区| 亚洲成人精品影院| 久久国产尿小便嘘嘘| 国产成人a级片| 一本久久a久久精品亚洲| 欧美午夜不卡视频| 制服丝袜亚洲网站| 久久夜色精品国产噜噜av| 国产日韩欧美高清| 亚洲欧洲一区二区在线播放| 一区二区在线看| 亚洲一区二区视频在线| 蜜臀av一区二区在线免费观看|