SORU
8 Temmuz 2009, ÇARŞAMBA


C 's "kötü" ama Scala'in operatör yükleme "iyi" kılan;,;?

C operatör aşırı yükleme çok Kötü Bir Şey(tm), ve daha yeni dilde tekrar edilmesi değil, bir hata olarak kabul edilir. Kesinlikle, bir özelliği Java tasarlarken özellikle bırakıldı.

Şimdi başladım okumaya kadar Scala, bulmam, ne görünüyor çok gibi operatör aşırı yükleme (her ne kadar teknik olarak yok operatör yükleme çünkü yok operatörleri, sadece fonksiyonlar). Ancak, niteliksel hatırladığım kadarıyla operatörler özel fonksiyonlar olarak tanımlanmış olan operatör C aşırı yükleme için farklı olacağını zannetmiyorum.

Benim sorum "" C daha ? daha iyi bir fikir Scala tanımlama fikri yapıyor

CEVAP
8 Temmuz 2009, ÇARŞAMBA


C doğru anlamı C. mavi operatörleri devralır "" 6 4 çok özel. Değil, örneğin, almak için bir işaretçi işlevini kullanabilirsiniz.

Öte yandan Scala bu şekilde operatörler yok. Sadece tanımlama yöntem adları büyük esneklik artı sözcük olmayan semboller için öncelik yerleşik bir bit vardır. Yani teknik olarak Scala operatör yükleme yok.

Onu aramak istediğiniz ne olursa olsun, operatör yükleme doğal olarak kötü, hatta C değil . Sorun kötü programcılar bunu istismar zaman. Ama açıkçası, programcı operatör yükleme kötüye kullanma becerisi götürüp programcılar bağımlılığı olan bir şeyleri düzeltmek için devede kulak vermez kanısında değilim. Gerçek cevap yol göstermektir. http://james-iry.blogspot.com/2009/03/operator-overloading-ad-absurdum.html

Yok-daha az, arasında farklılıklar vardır C 'nin operatör yükleme ve Scala esnek yöntem, IMHO, Scala az abusable ve daha abusable hem yapmak adlandırma.

C-düzeltme gösterim almanın tek yolu operatörler kullanıyor. Aksi takdirde nesne kullanmanız gerekir.mesaj(bağımsız değişken) veya işaretçi->(bağımsız değişken) veya () argument1, argument2 mesaj işlevi. Eğer kodunuzda belirli DSLish bir stil istiyorsanız o zaman operatörler kullanmak için baskı var.

Scala herhangi bir mesaj ile telkin gösterim gönder alabilirsiniz "değişken" non-word semboller sadece telkin nota almak için kullanmanıza gerek olmadığı anlamına gelir mükemmel Tamam. mesaj nesne.

C operatör aşırı yükleme aslında C operatörler sınırlıdır. Sadece operatörler insanlar üzerinde baskı koyar telkin gibi nispeten az bir semboller üzerine göster alakasız kavramlar geniş bir yelpazede için kullanılabilir sınırlaması ile birlikte "" ve "^< . "

Scala geçerli büyük bir aralığı sağlar sözcük olmayan yöntem adları gibi semboller. Örneğin, yazabileceğiniz Giriş-ish gömülü bir DSL var

female('jane)!         // jane is female
parent('jane,'john)!   // jane is john's parent
parent('jane, 'wendy)! // jane is wendy's parent

mother('Mother, 'Child) :- parent('Mother, 'Child) & female('Mother) //'// a mother of a child is the child's parent and is female

mother('X, 'john)?  // find john's mother
mother('jane, 'X)?  // find's all of jane's children

:-, !, ?, ve & sembolleri sıradan yöntemler olarak tanımlanır. Sadece C & C bu DSL göster denemesi zaten çok farklı kavramlar uyandıran bazı semboller gerektirecek kadar geçerli olacak.

Tabii ki, bu da kötüye başka bir tür için Scala açılır. Scala bir yöntem adlandırabilirsiniz $!&^% isterseniz.

Diğer diller gibi Scala, esnek kullanımı olan sözcük olmayan işlev ve Yöntem isimlerini görmek Smalltalk nerede, Scala, her "operatör" sadece başka bir yöntem ve Haskell sağlayan programcı tanımlamak öncelik ve fixity in esnek adında fonksiyonları.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • celebrateubuntu

    celebrateubu

    23 Mayıs 2011
  • DrakeVEVO

    DrakeVEVO

    17 AĞUSTOS 2009
  • J Medema

    J Medema

    11 EKİM 2006