亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ruby里面module和class的區別

ruby里面module和class的區別

慕無忌1623718 2019-05-31 14:02:42
ruby里面module和class的區別
查看完整描述

3 回答

?
子衿沉夜

TA貢獻1828條經驗 獲得超3個贊

 1、 模塊不能實例化,類不能include
  2、如果模塊和類不在用一個文件中,如果要使用include,先使用require把文件引入
  3、include不是簡單的將模塊的實例變量和方法拷貝到類中,而是建立一個由類到所包含模塊的引用
  4、如果有多個include,將依次生成代理類,最后一個include的將是該類的直接超類,依次向上衍生
  5、含有include的模塊或者類定義,可以訪問它所包含的常量,類變量和實例方法。如果一個模塊被包含,改模塊的常量,類變量,實例方法都被綁定到該類的一個匿名超類中,類的對象會響應發送給模塊實例方法的消息
  6、模塊里可以定義一個initialize方法,當創建包括模塊的類的對象時,滿足一下條件之一,則模塊的該方法將被調用.


查看完整回答
反對 回復 2019-06-01
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

以@開始的變量是【實例變量】,實例變量屬于特定的對象。
class Person
def initialize(name, gender, age)
@name = name
@gender = gender
@age = age
end
end
上面的例子中,@name, @gender,@age都是實例變量??梢栽陬惢蜃宇惖姆椒ㄖ幸脤嵗兞?。若引用尚未被初始化的實例變量的話,其值為nil。
【類變量】被一個類的所有實例對象共享,也可以被類方法訪問到。類變量名以‘@@’,開始,例如‘@@number’。和全局變量,實例變量不同,類變量在使用前必須初始化:
class Person
@@number = 0 #使用前必須有初值
def initialize(name, gender, age)
@name = name
@gender = gender
@age = age
@@number += 1
end
end
類變量是私有的,在類外無法直接訪問,你只能通過實例方法和類方法去訪問它。


 

 





查看完整回答
反對 回復 2019-06-01
?
元芳怎么了

TA貢獻1798條經驗 獲得超7個贊

當class中或多個class中有重復代碼需要抽象出來時,你會想要一個module的東東。
因為不能多重繼承,只好用module來補償一下。

另一點我覺得更容易解耦,繼承哪個類,你只能選一個,但具體要include哪幾個module你可以根據不同需求選擇不同的module. 有了autoload更加能優化性能。



查看完整回答
反對 回復 2019-06-01
  • 3 回答
  • 0 關注
  • 617 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號