iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0
自我挑戰組

從零開始的工程師轉職之路.新手學Ruby / Ruby on Rails遇到的問題系列 第 24

Day24-[Ruby]new(新的)、allocate(分配)、superclass(超類別/父類別)是什麼?

  • 分享至 

  • xImage
  •  

Day24-[Ruby]new(新的)、allocate(分配)、superclass(超類別/父類別)是什麼?

昨天講到類別比模組多了
new(新的), allocate(分配), superclass(超類別/父類別)
這三種實體方法。
可以參考這裡

new(新的)

class1 = Class.new do
  def meth1
    "hello"
  end
  def meth2
    "bye"
  end
end

a = class1.new     
p a.meth1          # "hello"
p a.meth2          # "bye"

class1使用了實體方法new,
產生了實體a,
實體a可以使用class1內的方法。

allocate(分配)

class2 = Class.new do
  def initialize
    @initialized = true
  end

  def initialized?
    @initialized || false
  end
end

b = class2.allocate
p b.initialized?   # false

一般來說,
使用new方法產生了實體,
如果類別內有initialize(初始化)將會一併執行。
但使用分配的方法,就不會執行初始化。

superclass(超類別/父類別)

p Class.superclass   #Module
p Module.superclass  #Object
p Object.superclass  #BasicObject
p BasicObject.superclass  #nil

使用superclass方法,
可以知道繼承自哪裡,
也就是說可以找到爸爸是誰的方法。
由上面例子可一層一層推知相對關係
Class(類別)上一層是Module(模組)
Module(模組)上一層是Object(物件)
Object(物件)上一層是BasicObject(基本物件)
BasicObject(基本物件)上一層是nil(虛空)也就是沒有上一層。
ruby世界的血緣關係圖出現了!

tags: Ruby new allocate superclass

上一篇
Day23-[Ruby]類別(Class)與模組(Module)的差異在哪裡?
下一篇
Day25-[Ruby]類別繼承與模組使用時機
系列文
從零開始的工程師轉職之路.新手學Ruby / Ruby on Rails遇到的問題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言