日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【讨论】关于什么时候使用module,什么时候使用class

發(fā)布時間:2024/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【讨论】关于什么时候使用module,什么时候使用class 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一段邏輯既可以做一個module,也可以做一個class
老早之前就在糾結(jié)這個問題,實在找不出個界限

最近和同事討論了一下,有了新的認(rèn)識,和大家討論一下
1.module比較關(guān)注的是功能方面,它把方法收集在一起,組成一個特殊的上下文,通常表示一種能力,比如Enumerable。
2.class就是我們所理解的經(jīng)典的類,它可以創(chuàng)建實例對象,包含實例變量和類變量,一般通過對象來與外界交流。

除了這些,我認(rèn)為class通常都是邏輯完整的,甚至能在現(xiàn)實世界中找到對應(yīng)物,而對module來說卻很難是邏輯完整的,因為module只能描述一個特殊的上下文,而這個上下文通常無法組成一個完整的對象,需要被找一個宿主,而這個宿主有可能是class,也有可能是module

?

huacnlee?·?#1?·?2 年前?1 人喜歡?

需要用于做命名空間或用于 mixin 的時候用 module, 其他時候用 class

hhuai?·?#2?·?2 年前?喜歡?

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

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

總的一點來說,順其自然,你當(dāng)前用什么能達(dá)到目的就用啥,過幾個月或幾個星期,覺得以前的寫法不爽時你會自己回來重構(gòu)的。

firsthym?·?#3?·?2 年前?喜歡?

module就像是工具箱,里面的各種工具,就是class

xuluan?·?#4?·?2 年前?喜歡?

module 感覺有點像cpp里面的抽象類
當(dāng)然只是類似,其間還是有很多差別的

hhuai?·?#5?·?2 年前?喜歡?

#4樓?@xuluan?跟抽象類沒關(guān)系,ruby中不搞這概念。ruby來的是ducking type。抽象和接口更多的作用是強(qiáng)制約束,目的不是代碼復(fù)用。

jjym?·?#6?·?2 年前?喜歡?

class比module多兩個功能,1)繼承,2)實例化
所以用到這兩功能的就class
用不到就module

xuluan?·?#7?·?2 年前?喜歡?

@hhuai?我的意思,就是樓上說的,實例化吧
在cpp里面 抽象類是不能實例化的,就像 ruby里面的module一樣
當(dāng)然 這兩種語言差別很大,只是一個不恰當(dāng)?shù)谋扔鞫?/p> 6233843?·?#8?·?2 年前?喜歡?

#1樓?@huacnlee?這倒是一個不錯的建議。那該如何判斷某段代碼需要mixin么?簡單的觀察別的類是否需要mixin么?

6233843?·?#9?·?2 年前?喜歡?

#2樓?@hhuai?你說的我明白,但總是在糾結(jié)用class或module,尤其是一段代碼既可以用調(diào)用module,也可以調(diào)用class的類方法,就更加糾結(jié),呵呵

huacnlee?·?#10?·?2 年前?喜歡?

#9樓?@6233843?不了解的時候暫時用 Class 好了,等你 Ruby 再熟悉一些的時候你會慢慢發(fā)現(xiàn),你需要用 Module,那個時候再去了解也不遲

ery?·?#11?·?2 年前?喜歡?

我認(rèn)同樓主的觀點,但是我想說說自己的看法:
我認(rèn)為,先用class去寫代碼,
當(dāng)多個class的代碼邏輯相似的時候,
可以考慮用基類/繼承來提取相似的邏輯。

當(dāng)繼承無法實現(xiàn)提取的時候,
比如,有時候,兩個class代碼邏輯相似,
但是,兩個class的基類不同,而ruby又不支持多繼承。

所以,這個時候,
就可以考慮使用module來實現(xiàn),相似代碼的提取。

6233843?·?#12?·?2 年前?喜歡?

#6樓?@jjym?那怎么確定我需要繼承和實例化呢?

6233843?·?#13?·?2 年前?喜歡?

#10樓?@huacnlee?你的意思是當(dāng)我需要module mixin到別的類時,再抽取module,現(xiàn)在我也是這樣做的。但有些情況是模棱兩可的,module可以,class也可以,這時候我總是靠自己的感覺來判斷是否需要module,但始終覺得這種‘飄渺’的感覺很難說服我自己,所以我希望能找到一個界限。

6233843?·?#14?·?2 年前?喜歡?

#11樓?@ery?同意,從最簡單的開始,一步一步重構(gòu)到最優(yōu)。

jjym?·?#15?·?2 年前?喜歡?

#12樓?@6233843?
你智商這么高,肯定能確定的,要相信自己

yangman_wenzhu?·?#16?·?3 月前?喜歡?

#10樓?@huacnlee?在 Class 中 include module 是不是好方法呢?

轉(zhuǎn)載于:https://www.cnblogs.com/I-Tegulia/p/4554985.html

總結(jié)

以上是生活随笔為你收集整理的【讨论】关于什么时候使用module,什么时候使用class的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。