28
在Io語言中,有兩種創建插槽的方法:newSlot和setSlot。兩者似乎都有類似的行爲,除了newSlot也創建了一個setter。什麼情況下需要在創建插槽的同時創建setter?無論如何,二傳手的目的究竟是什麼?Io語言中newSlot和setSlot有什麼區別?
在Io語言中,有兩種創建插槽的方法:newSlot和setSlot。兩者似乎都有類似的行爲,除了newSlot也創建了一個setter。什麼情況下需要在創建插槽的同時創建setter?無論如何,二傳手的目的究竟是什麼?Io語言中newSlot和setSlot有什麼區別?
我相信它提供了良好的編碼實踐的便利。因此,如果您想公開一個對象屬性,那麼newSlot
或其同義詞::=
是首選的方式。
newSlot
可以使事情看起來更好。例如。
Animal := Object clone do (
legs ::= nil // creates leg slot & setLegs() setter
tail ::= nil // creates tail slot & setTail() setter
)
// I think below is more aesthetic
Cat := Animal clone setLegs(4) setTail(1)
// compared to this
Dog := Animal clone do (legs = 4; tail = 1)
而且它也可以繞過do()
上下文。例如。
Pet := Animal clone do (
name ::= nil
)
myPetCats := list("Ambrose", "Fluffy", "Whiskers") map (petName,
Pet clone do (name = petName) // throws exception
)
的Pet clone do (name = petName)
會死扔Exception: Pet does not respond to 'petName'
因爲do()
被克隆Pet
上下文中解釋,因此它無法看到petName
。
因此,你需要使用的setter:
myPetCats := list("Ambrose", "Fluffy", "Whiskers") map (petName,
Pet clone setName(petName)
)
我也想知道什麼是二傳手在木衛一的7種語言的第一天在7個星期結束。 – Jedidja 2012-10-18 20:20:09