2011-05-12 75 views
28

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

+3

我也想知道什么是二传手在木卫一的7种语言的第一天在7个星期结束。 – Jedidja 2012-10-18 20:20:09

回答

34

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