最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Ruby面向?qū)ο缶幊讨蓄惖姆椒ㄅc類的擴(kuò)展

 更新時間:2016年06月04日 16:22:20   作者:日拱一卒  
類與方法是面向?qū)ο缶幊陶Z言中的典型特性,方法的概念與函數(shù)基本上相同,只不過類方法會受到類作用域的約束,這里我們就簡單來看一下Ruby面向?qū)ο缶幊讨蓄惖姆椒ㄅc類的擴(kuò)展

類方法

類方法其實質(zhì)是生活在該類的單件類中的單件方法。其定義方法有三種,分別是:

# 法一
def MyClass.a_class_method; end


# 法二
class MyClass
  def self.anther_class_method; end
end


# 法三*
class MyClass
  class << self
    def yet_another_class_method; end
  end
end

其中第三種方法道出了,類方法的實質(zhì),特別記憶一下!

類擴(kuò)展

類擴(kuò)展通過向類的單件類中添加模塊來定義類方法。

module MyModule
  def my_method; ‘hello'; end
end

class MyClass
  class < self
    include MyModule
  end
end

MyClass.my_method

上面代碼展示了具體類擴(kuò)展的實現(xiàn)方式,將一個MyModule模塊引入到MyClass類的單件類中,因為my_method方法是MyClass的單件類的一個實例方法,這樣,my_method方法也是MyClass的一個類方法。

對象擴(kuò)展

類方法是單件方法的特例,因此可以把類擴(kuò)展這種技巧應(yīng)用到任意對象上,這種技巧即為對象擴(kuò)展
 

# 法一: 打開單件類來擴(kuò)展
module MyModule
  def my_method; ‘hello'; end
end

obj = Object.new
class << obj
  include MyModule
end

obj.my_method  # => “hello”
obj.singleton_methods  # => [:my_method]
# 法二:Object#extend方法
module MyModule
  def my_method; ‘hello'; end
end

obj = Object.new
#對象擴(kuò)展
obj.extend MyModule
obj.my_method  # => “hello” 
#類擴(kuò)展
class MyClass
  extend MyModule
end

MyClass.my_method # => “hello”

Object#extend是在接受者的單件類中包含模塊的快鍵方式。

相關(guān)文章

最新評論

灵丘县| 辽阳市| 沈阳市| 冕宁县| 中宁县| 英德市| 离岛区| 普定县| 高雄县| 拉萨市| 聂荣县| 申扎县| 郑州市| 宿松县| 万载县| 商河县| 嘉善县| 基隆市| 荔浦县| 兴文县| 万年县| 宁武县| 普兰店市| 上犹县| 龙川县| 靖边县| 博乐市| 博客| 青岛市| 安康市| 十堰市| 合肥市| 阳高县| 遵义县| 大安市| 定安县| 石台县| 囊谦县| 汝南县| 固镇县| 揭阳市|