28

Io 言語では、スロットを作成するための 2 つのメソッドがあります: newSlot と setSlot です。newSlot もセッターを作成することを除いて、どちらも同様の動作をしているようです。スロットの作成と同時にセッターを作成する必要があるのはどのような場合ですか? とにかくセッターの目的は何ですか?

4

1 に答える 1

35

これは、優れたコーディング プラクティスを提供する便利なツールだと思います。したがって、オブジェクト属性を公開したい場合は、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)will die throwing Exception: Pet does not respond to 'petName'becauseは複製されたコンテキストdo()内で解釈されるため、を見ることができません。PetpetName

したがって、代わりにセッターを使用する必要があります。

myPetCats := list("Ambrose", "Fluffy", "Whiskers") map (petName,
    Pet clone setName(petName)
)
于 2011-05-12T12:10:24.703 に答える