亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Ruby 中的 module_function 和 extend self異同

2019-10-26 19:30:05
字體:
來源:轉載
供稿:網友

在閱讀開源的 Ruby 代碼和編寫可維護性的代碼經常遇到這兩者的使用,那么他們兩者的共同點和區別是什么呢?

module_function

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

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

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

# test.rbmodule 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_functionendMyModule.module_methodMyModule.private_method_to_module_functionbegin MyModule.public_methrescue p "public method can not be called by module_name.public_meth"endbegin MyModule.private_methodrescue NoMethodError p "private method can not be called by module_name.module_method"endclass MyClass include MyModuleendobj = MyClass.newobj.public_methbegin obj.private_methodrescue NoMethodError p "private method in module can not be call by object.method_name"endbegin obj.module_methodrescue NoMethodError p "module method can not be called by object.method_name, for object, module method is private instance method"end#調用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"            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中国日韩欧美久久久久久久久| 亚洲一区二区在线播放| 国产精品女视频| 欧美大片网站在线观看| 九九综合九九综合| 国产激情久久久| 色妞一区二区三区| 81精品国产乱码久久久久久| 亚洲国产古装精品网站| 亚洲欧洲一区二区三区在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲国产精品视频在线观看| 国产精品∨欧美精品v日韩精品| 成人女保姆的销魂服务| www.亚洲一二| 亚洲国产精品一区二区三区| 亚洲免费一在线| 欧美高清视频在线播放| 中文字幕欧美在线| 亚洲欧美视频在线| 欧美日韩亚洲网| 国产三级精品网站| 久久av在线看| 亚洲欧美日韩中文视频| 97婷婷大伊香蕉精品视频| 成人黄色av播放免费| 欧美精品一区二区三区国产精品| 日本中文字幕久久看| 成人欧美一区二区三区在线湿哒哒| 亚洲va男人天堂| 中文字幕日本欧美| 日韩欧美第一页| 国产欧美久久久久久| 欧美三级欧美成人高清www| 欧美激情国产精品| 国产日韩欧美中文| 91久久精品视频| 国产91热爆ts人妖在线| 亚洲久久久久久久久久久| 国产三级精品网站| 欧美高清激情视频| 国产精品都在这里| 隔壁老王国产在线精品| 国产精品久在线观看| 欧美极度另类性三渗透| 国产成人精品视| 国产精品中文字幕在线观看| 欧美激情精品久久久久| 亚洲xxxx18| 国产一区二区丝袜高跟鞋图片| 国产精品毛片a∨一区二区三区|国| 国产极品精品在线观看| 成人免费在线视频网址| 精品成人国产在线观看男人呻吟| 亚洲精品一区二区久| 日韩精品丝袜在线| 国产精品999999| 国产欧美久久久久久| 久久久久久九九九| 国产欧美精品xxxx另类| 欧美色播在线播放| 欧美性xxxxx极品娇小| 久久久久久久影院| 国模gogo一区二区大胆私拍| 国产亚洲精品久久久久久牛牛| 亚洲综合第一页| 中文字幕国产精品久久| 欧美大片欧美激情性色a∨久久| 国产精品网站入口| 国产精品久久久久久婷婷天堂| 中文字幕欧美视频在线| 亚洲黄色av女优在线观看| 亚洲视频在线播放| 91影院在线免费观看视频| 亚洲精品一区二区久| 欧美专区第一页| 国内精品久久久久久久久| 久久久久久久一区二区三区| 日本精品一区二区三区在线| 亚洲人成网站999久久久综合| 亚洲成人av在线播放| 久久久久久伊人| 欧美大片在线看免费观看| 午夜精品久久17c| 亚洲精品电影在线| 日韩成人中文字幕在线观看| 日韩精品视频在线观看网址| 国产精品香蕉av| 国产午夜精品麻豆| 亚洲人成网站免费播放| 亚洲天堂一区二区三区| 亚洲性无码av在线| 成人免费看吃奶视频网站| 精品视频一区在线视频| 亚洲夜晚福利在线观看| 日韩av网站电影| 成人精品视频在线| www.美女亚洲精品| 欧美日韩一区二区在线播放| 亚洲精品大尺度| 国产日韩在线看| 日本高清视频精品| 亚洲一区二区中文| 欧美乱大交xxxxx| 欧美亚洲日本黄色| 欧美成人免费全部观看天天性色| 欧美体内谢she精2性欧美| 亚洲精品少妇网址| 日韩电影网在线| 欧美多人乱p欧美4p久久| 91免费精品国偷自产在线| 欧美一区二区色| 国产91在线播放| www.日韩.com| 欧美一区二区三区图| 亚洲精品乱码久久久久久按摩观| 亚洲第一视频网| 在线看国产精品| 日韩精品视频观看| 国产成人精品视| 日韩精品免费一线在线观看| 亚洲色图综合网| 韩国三级日本三级少妇99| 97婷婷大伊香蕉精品视频| 国产免费一区二区三区香蕉精| 国产欧美日韩丝袜精品一区| 91久久久久久久一区二区| 亚洲综合成人婷婷小说| 国产精品视频白浆免费视频| 91香蕉电影院| 欧美激情第一页xxx| 国产成人avxxxxx在线看| 国产成人精品综合久久久| 久久激情视频免费观看| 成人疯狂猛交xxx| 精品久久久久久久久久久久久久| 超碰97人人做人人爱少妇| 欧美性猛交xxxx黑人| 亚洲一区二区中文字幕| 中文字幕日韩综合av| 91在线精品播放| 国产色婷婷国产综合在线理论片a| 久久精品视频亚洲| 成人免费观看网址| 亚洲色图色老头| 日韩精品视频中文在线观看| 91av视频在线| 国产精品视频一区二区三区四| 久久国产天堂福利天堂| 一区二区三区回区在观看免费视频| 日韩美女免费线视频| 久久天天躁夜夜躁狠狠躁2022| 97福利一区二区| 欧美电影在线观看高清| 成人网在线免费观看| 日韩中文字幕国产| 欧美视频中文字幕在线| 97视频在线观看亚洲| 国产成人精品久久二区二区91| 97人人模人人爽人人喊中文字| 国产成人福利视频| 欧美日韩亚洲视频| 国产激情视频一区| 91在线播放国产|