【问题标题】:Whats the difference between newSlot and setSlot in the Io Language?Io 语言中的 newSlot 和 setSlot 有什么区别?
【发布时间】:2011-08-23 18:14:36
【问题描述】:

在 Io 语言中,有两种创建槽的方法:newSlot 和 setSlot。两者似乎都有相似的行为,除了 newSlot 也创建了一个 setter。什么情况下需要在创建插槽的同时创建 setter?无论如何,setter 的目的到底是什么?

【问题讨论】:

  • 我还想知道在 7 周内以 7 种语言在 Io 的第一天结束时的二传手是什么。

标签: iolanguage


【解决方案1】:

我相信它提供了良好的编码实践的便利。因此,如果您想公开对象属性,那么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)
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 2011-04-15
    • 2011-02-09
    • 2017-01-09
    • 2021-03-24
    • 2011-07-21
    相关资源
    最近更新 更多