s1
, s2
, ..., sn
, x
numaralı herhangi bir nesneyi kabul edebileceğimi düşünelim. Ayrıca, nesne üzerinde çalışan bu seçmenlerden birinin sonucunun, aynı türden güncellenmiş bir nesne olduğunu varsayalım. Sonra "zincir" gibi ben istedikleri gibi (yeter ki tekli mesajlar olduğu gibi) bu seçiciler, olabilir:Zincirleme anahtar sözcükleri zincirleme
x s1 s2 ... sn
Bu x s1
sonucunu alıp seçici s2
uygulayacaktır, ardından seçici s3
uygulamak Bu sonuç, vb. Çeşitli sonuçlar için bazı sırayla bu seçicileri bir veya daha fazla uygulamanız gerekir: seçiciler tekli mesajlar ise Smalltalk yılında
x s8 s2
Bunu yapabilirim. Ancak, seçicilerim anahtar kelime iletileri ise, artık bunu yapamam. x
bireysel seçicileri, s1:
, s2:
, kabul ederse ..., sn:
, ardından aşağıdaki çalışmaz: basamaklı
x s1: a1 ; s2: a2 ; ... ; sn: an
Ama kullanarak:
x s1: a1 s2: a2 ... sn: an
;
operatör yoktur : Her aşama, yol boyunca orijinal x
değiştirir ve bu durumda x
değiştirmek istemiyorum. Zincir kelime mesajlar için
, ben parantez ile aşağıdaki sözdizimini kullanarak sol düşünüyorum:
(...(((x s1: a1) s2: a2) ... sn: an)
Ben 3 veya daha fazla keywrod mesajlar varsa ben LISP'de programlama olduğum gibi hissettiriyor hangisi. Bunun spesifik bir örneği çok boyutlu bir dizi olabilir. foo
3 boyutlu bir dizi olduğunu ve dizide konumda 2,3,5 bir nesneye erişim isteseydim, o şekilde görünecektir düşünüyorum: Elbette, önemsiz bir örnek var
(((foo at: 2) at: 3) at: 5) some_object_selectors
ama göstermektedir dava. Bir başka türde gömülü nesneler veya son sonuçla ilgilendiğiniz birbirini takip eden nesne işlemleri zinciri olabilir.
Smalltalk'ta bunu yapmak için sözdizimsel olarak daha çekici bir yol var mı? Ben seçiciler uygulamak istiyorum bu yana
x s1: a1 & s2: a2 & ... & sn: an
: Başka operatör, ;
operatöre belki kuzeni (diyelim biz örneğin &
kullanın) gibi zincirleyin hangi, yok varsayarak ediyorum herhangi bir veya hemen hemen istenen herhangi bir sırada (muhtemelen farklı sonuçlar için), seçici form, s1:s2:s3:...
çok sınırlayıcıdır. Ayrıca, bu gibi eşdeğer ifade edilir zaten böyle Ruby gibi diğer diller, var olan bir tesis verir:
x.s1(a1).s2(a2)...sn(an)
özel operatör eksik, alternatif vites bağımsız değişken çiftlerinin bir dizi geçmek olabilir veya belki seçici argüman çiftlerinin bir arama tablosu.Arama tablosu olarak ben sadece bunu yazabilir beri beni bir dizi düşkündürler yapar (oluşturulduktan ve doldurulması gereken) değişmezleri geçirilmesi için kurulum gerektirir: Bu hala biraz aksak
x { {s1. a1}. {s2. a2}. ... {sn. an} }
, bense Bu, tüm parantezleri kullanmaktan daha zarif olduğundan emin değil. Korkarım ki sorum en azından kısmen öznel olabilir, ama en iyi uygulamanın ne olabileceğini ve bir operatörün yardım edebileceğinin farkında olmadığım bir operatör olup olmadığını veya bir Smalltalk tarafından eğlendirilip eğlendiğini öğrenmek istiyorum. standartlar gövdesi.
İyi soru - böyle bir özelliği kaçırmak için değil İlki, düzenli posta listesine tartışılan oluyor. Ben exellent blog http://blog.3plus4.org/2007/08/30/message-chains/ –
@ aka.nice evet, bana 8 yıl önce bana soruları yenmek gibi görünüyor. :) – lurker