gpt4 book ai didi

iolanguage - Io 语言中的 newSlot 和 setSlot 有什么区别?

转载 作者:行者123 更新时间:2023-12-03 10:00:47 25 4
gpt4 key购买 nike

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

最佳答案

我相信它提供了良好的编码实践的便利。因此,如果您想公开对象属性,那么 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) throw 会死 Exception: Pet does not respond to 'petName'因为 do()在克隆 Pet 中解释上下文,所以它看不到 petName .

因此,您需要使用 setter:
myPetCats := list("Ambrose", "Fluffy", "Whiskers") map (petName,
Pet clone setName(petName)
)

关于iolanguage - Io 语言中的 newSlot 和 setSlot 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5972327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com