第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Ruby的class中定義以self.開頭的方法有何不同

Ruby的class中定義以self.開頭的方法有何不同

BIG陽 2019-04-16 20:26:58
比如這個(gè)代碼classCategory
查看完整描述

2 回答

?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

self指向當(dāng)前class,所以這種定義方法會(huì)定義出class方法(classmethod),如果不加self.就會(huì)定義出實(shí)例方法(instancemethod)。
這種self.的寫法在你的例子里等同于:
defCategory.last_updated_at
...
end
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-16
?
森欄

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超5個(gè)贊

一個(gè)ruby對(duì)象可以調(diào)用的方法有兩類。
一類是定義于該對(duì)象的class中,叫instancemethod,比如
deflast_updated_at
#blahblah
end
那么Category的實(shí)例便可以調(diào)用該方法,而Category本身不可以
category1=Category.new
category2=Category.new
category1.last_updated_at#legal
category2.last_updated_at#legal
Category.last_updated_at#illegal
另一類叫singletonmethod,它只能被一個(gè)對(duì)象調(diào)用,該對(duì)象的類不可以,與該對(duì)象同屬一個(gè)類的其他對(duì)象也不可以。singletonmethod的定義方式如下
#category1=Category.new
defcategory1.last_updated_at
#blahblah
end
這樣定義之后,只有category1這個(gè)對(duì)象才可以調(diào)用last_updated_at方法
category1.last_updated_at#legal
category2=Category.new
category2.last_updated_at#illegal
Category.last_updated_at#illegal
ruby的類也是對(duì)象,也可以定義它自己的singletonmethod,比如
defCategory.last_udpated_at
#blahblah
end
這樣一來只有Category可以調(diào)用last_updated_at方法,而它的實(shí)例不可以,其他類也不可以,確切說任何其他對(duì)象都不可以
Category.last_updated_at#legal
category=Category.new
category.last_updated_at#illegal
在Category類的定義內(nèi)部(方法的外部),self指代Category本身,故而
defCategory.last_udpated_at
#blahblah
end
可以替換成
defself.last_udpated_at
#blahblah
end
這便是你問題中定義的那個(gè)方法?,F(xiàn)在明白了吧?實(shí)質(zhì)上它是Category的singletonmethod,而Category是一個(gè)類,類的singletonmethod又稱為該類的classmethod,只能由該類本身調(diào)用。
需要注意的是,classmethod就是singletonmethod,只不過它是一個(gè)類的singletonmethod,除此之外并沒有什么特別之處。就像instancemethod由對(duì)象所屬的class持有,singletonmethod也由對(duì)象的一個(gè)叫eigenclass的東西持有。關(guān)于eigenclass還有很多學(xué)問,這里就不提了。我會(huì)在文章里講一下。
                            
查看完整回答
反對(duì) 回復(fù) 2019-04-16
  • 2 回答
  • 0 關(guān)注
  • 766 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)