日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何正確實(shí)現(xiàn)Ruby創(chuàng)建可參數(shù)化類

Ruby語言在實(shí)際使用中會(huì)創(chuàng)建許多類,來滿足我們的整體編程需求。對(duì)于初學(xué)者來說,我們必須熟練地掌握創(chuàng)建類的方法,比如Ruby創(chuàng)建可參數(shù)化類等等。#t#

創(chuàng)新互聯(lián)建站是專業(yè)的新會(huì)網(wǎng)站建設(shè)公司,新會(huì)接單;提供網(wǎng)站設(shè)計(jì)、網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行新會(huì)網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

如果我們要?jiǎng)?chuàng)建很多類,這些類只有類成員的初始值不同,我們很容易想起:

  1. class IntelligentLife # Wrong 
    way to do this! 
  2. @@home_planet = nil 
  3. def IntelligentLife.home_planet 
  4. @@home_planet 
  5. end 
  6. def IntelligentLife.home_planet=(x) 
  7. @@home_planet = x 
  8. end 
  9. #... 
  10. end 
  11. class Terran < IntelligentLife 
  12. @@home_planet = "Earth" 
  13. #... 
  14. end 
  15. class Martian < IntelligentLife 
  16. @@home_planet = "Mars" 
  17. #... 
  18. end 

這種Ruby創(chuàng)建可參數(shù)化類方式是錯(cuò)誤的,實(shí)際上Ruby中的類成員不僅在這個(gè)類中被所有對(duì)象共享,實(shí)際上會(huì)被整個(gè)繼承體系共享,所以我們調(diào)用Terran.home_planet,會(huì)輸出“Mars”,而我們期望的是Earth一個(gè)可行的方法:

我們可以通過class_eval在運(yùn)行時(shí)延遲求值來達(dá)到目標(biāo):

 
 
 
  1. class IntelligentLife 
  2. def IntelligentLife.home_planet 
  3. class_eval("@@home_planet") 
  4. end 
  5. def IntelligentLife.home_planet=(x) 
  6. class_eval("@@home_planet = #{x}") 
  7. end 
  8. #... 
  9. end 
  10. class Terran < IntelligentLife 
  11. @@home_planet = "Earth" 
  12. #... 
  13. end 
  14. class Martian < IntelligentLife 
  15. @@home_planet = "Mars" 
  16. #... 
  17. end 
  18. puts Terran.home_planet # Earth 
  19. puts Martian.home_planet # Mars 

最好的Ruby創(chuàng)建可參數(shù)化類方法:

我們不使用類變量,而是使用類實(shí)例變量:

 
 
 
  1. class IntelligentLife 
  2. class << self 
  3. attr_accessor :home_planet 
  4. end 
  5. #... 
  6. end 
  7. class Terran < IntelligentLife 
  8. self.home_planet = "Earth" 
  9. #... 
  10. end 
  11. class Martian < IntelligentLife 
  12. self.home_planet = "Mars" 
  13. #... 
  14. end 
  15. puts Terran.home_planet # Earth 
  16. puts Martian.home_planet # Mars 

網(wǎng)頁名稱:如何正確實(shí)現(xiàn)Ruby創(chuàng)建可參數(shù)化類
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/cdjispi.html