2011-04-08 13 views
5

Ufak çapta yeni ve öğrendiğim diğer programlama dilleri gibi, basit bir "merhaba dünya" programı yapmaya çalıştım.Bir Transcript penceresini Pharo/Squeak dilinde benzersiz olarak nasıl tanımlarım?

Transcript show: 'hello world'; cr.

kadarıyla: Ben Pharo/Squeak içinde ne yapmak bir transkript penceresini açmak için olduğunu öğrendik, 'Alt-d' çalıştırmak için bastırdı sonra çalışma alanı penceresine aşağıdaki kodu yazmış ve Ben çizgi transkript nesnesine argümanı ile "şov" mesaj gönder "merhaba dünya" anlamına gelmekte olup beklendiği gibi benim transkript penceresinde artık gösterir anlamak:

hello world

şimdiye kadar iyi, ancak, ne zaman ikinci bir transkript penceresi açtı ve kodu tekrar çalıştırdı. Tarih:

hello world

hem transkript pencereler tanımlayıcı "Transkript" ile tanımlanır sanki. Bu bana kafamı karıştırdı çünkü transkript pencerelerinin transkript pencere sınıfının "örnekleri" olması gerektiğini düşünürdüm. Bu nedenle, bunları benzersiz bir şekilde tanımlamak için bir yol olmamalı mı?

cevap

11

Bu karmaşık ve mükemmel bir sorudur. Smalltalk, tüm globals'ların depolandığı büyük bir sözlüktür. Globals genellikle sınıftır, ancak orada herhangi bir nesne olabilir. Bu sadece bir sözlük (anahtar/değer). Ben bahsettiğim bu büyük sözlük Smalltalk denir. "Smalltalk teftişi" yaz ve onu göreceksin. SmalltalkImage sınıfının eşsiz örneğidir.

Yani ... kodunuzda MyClass yazdığınızda, bunun nedeni "Smalltalk at: #MyClass" değerinde, sınıfınız var. Ama sen de yapabilirsin: Smalltalk at: #mariano put: 'mariano'. Sonra her yerde "mariano" yazabilirsin ve "mariano" dizesini alırsın.

Transcript böyle bir şeydir. (Smalltalk at: #Transcript) içinde Transcript'in benzersiz örneğini saklar. Aslında, bir Transcript sınıfının örneği değil, başka bir örnek olabilir. Pharo'da, ThreadSafeTranscript örneğidir. Bunu kontrol edin:

ThreadSafeTranscript instanceCount -> 1 Transcript open. Transcript açık. Transcript açık.

Ve her zaman bir tane olacak. Çünkü Transcript'in kendisi MODEL'dir. Manzara değil. Görünüm (bir Transcript'i açtığınızda açılan pencereler), modeli, Transcript'in benzersiz örneği olan PluggableTextMorph örnekleridir. Bunu kontrol edin:

PluggableTextMorph instanceCount - >> 11 Transkript açık. Transcript açık. Transcript açık. PluggableTextMorph instanceCount - >> 14

Daha fazla bilgi için debug "Transcript open".

Alkışlar

+0

Ayrıntılı yanıt için teşekkürler – oscarkuo

3

Transcript örneği tutan global bir değişkendir. Sınıfını görmek için inceleyin ve böylece yerel referans alacağınız başka bir pencereyi nasıl açacağınızı görün.

İlgili konular