Tam olarak gönderme işlevleri nedir? Onları yönlendirdim ve her şey belirsiz. Diğer işlevlerin içinde sadece yuvalanmış bloklar/kapanışlar gibi görünüyorlar? Bir scala/lift noktasından bahsetmişken .. ama evrensel olduğunu varsayalım, onları yakutta da gördüğümü gördüm.Sevkiyat işlevleri
cevap
Gönderme amacı, işlevinizde ne yapacağınıza dinamik olarak karar vermektir.
Bir (dinamik) gönderme işleviniz varsa, ana (ya da yalnızca, dönüştürme veya başka dönüşümlere ihtiyacınız yoksa), başka hangi işlevin çağrılacağına karar vermeniz gerekir. Karar genellikle yöntemin çağrıldığı örneğin türüne veya bazı parametrelerin türüne dayanır, ancak aynı zamanda örn. Parametre (ler) veya bazı yapılandırma değerlerinin değeri hakkında. Gönderme kuralı, kodlanmış olabilir (örneğin scalada desen eşleştirmesi kullanılarak) veya bir gönderme tablosundan gelebilir.
Belirtildiği gibi, tek gönderme gibi (somut yöntem, orijinal yöntemin çağrıldığı örneğe bağlıdır, temel bir OO mekanizmasıdır), çift gönderim gibi farklı varyasyonlar vardır (farklı işlevlere göre bir işlev çağrısı gönderir) çağrıda yer alan birden fazla nesnenin çalışma zamanı türleri.
İlgili bir tasarım deseni, varolan sınıflara dinamik olarak bir dizi işlev eklemenize olanak tanıyan ve aynı zamanda özünde dinamik dağıtımı olan bir Ziyaretçi şeklidir.
İç içe geçirilen bloklar/kapaklar, gönderme yönteminin iç kısmındaki beton yöntemini veya bazı başlatma kodlarında (örneğin, gönderme tablosu için) tanımladığınızda görünür.
sevk kodlanmış kararla parametresinin değeri, üzerinde ve sevk tabloyla dayanır durum için basit bir örnek:
class Dispatch {
def helloJohn(): String = "Hello John"
def helloJoe(): String = "Hello Joe"
def helloOthers(): String = "Hello"
def sayHello(msg: String): String = msg match {
case "John" => helloJohn()
case "Joe" => helloJoe()
case _ => helloOthers()
}
val fs = Map("John" -> helloJohn _, "Joe" -> helloJoe _)
def sayHelloDispatchTable(msg: String): String = fs.get(msg) match {
case Some(f) => f()
case _ => helloOthers()
}
}
Sevk süreli Kaldırma web hizmetleri isteklerini sevk için kullanan bir sistemdir.
RestHelper kullanarak gönderme fonksiyonunu tanımlamak için en kolay yolu, örneğin
(http://www.assembla.com/wiki/show/liftweb/REST_Web_Services bakınız):
object MyRestService extends RestHelper {
serve {
case "api" :: "user" :: AsLong(id) :: _ XmlGet _ => <b>ID: {id}</b>
case "api" :: "user" :: AsLong(id) :: _ JsonGet _ => JInt(id)
}
}
sonra Boot.scala içinde: bu yardımcı
LiftRules.dispatch.append(MyRestService)
Hope.
- 1. Gecikmeli Sevkiyat Çağır?
- 2. jsprit belirli bir araca nasıl sevkiyat eklenir
- 3. Tutarlı Sevkiyat sırası: com.apple.root.default-qos.overcommit crash
- 4. Magento'da, siparişe nasıl sevkiyat ve parça numarası eklenir
- 5. Toplama işlevleri
- 6. Call Go işlevleri C
- 7. F #: Aşırı yükleme işlevleri
- 8. Önek uzantısı işlevleri
- 9. Javascript güncelleştirme işlevleri
- 10. statik üye işlevleri devralma
- 11. JSP'de bildirme işlevleri?
- 12. Scala'da kaldırma işlevleri
- 13. CGFloat tabanlı matematik işlevleri?
- 14. Sql Server CLR İşlevleri
- 15. SparkSQL: toplu işlevleri
- 16. Sözlükde İşlevleri Kaydetme [Python]
- 17. PostgreSQL işlevleri dönen void
- 18. JSTL işlevleri JSF'de var
- 19. Vue.js işlevleri çalışmazken gösteriliyor
- 20. Çoklu yayınlarla çağrı işlevleri
- 21. Sympy: İfadedeki işlevleri alın
- 22. "Blok" -type şablon işlevleri
- 23. Üye işlevleri çağırılamıyor
- 24. Data.table için Sarıcı işlevleri
- 25. PHP'de GIS mekansal işlevleri?
- 26. Unityscript'in Temel İşlevleri
- 27. angular2 bağlamalarında matematik işlevleri
- 28. Bağımlılıklarla işlevleri düzenleme;
- 29. JavaScript 'kullanımı'; iç işlevleri
- 30. İzleme işlevleri değeri
Zorunlu blog bağlantısı: http://cleverlytitled.blogspot.com/2010/01/dynamic-dispatch-in-scala.html –