je suis tombé sur ce vraiment agréable à regarder le code Scala tout en recherchant XMPP pour un projet .Net nous travaillons:Comment ce code Scala pourrait-il apparaître dans un C# idiomatique?
object Main {
/**
* @param args the command line arguments
*/
def main(args: Array[String]) :Unit = {
new XMPPComponent(
new ComponentConfig() {
def secret() : String = { "secret.goes.here" }
def server() : String = { "communitivity.com" }
def subdomain() : String = { "weather" }
def name() : String = { "US Weather" }
def description() : String = { "Weather component that also supported SPARQL/XMPP" }
},
actor {
loop {
react {
case (pkt:Packet, out : Actor) =>
Console.println("Received packet...\n"+pkt.toXML)
pkt match {
case message:Message =>
val reply = new Message()
reply.setTo(message.getFrom())
reply.setFrom(message.getTo())
reply.setType(message.getType())
reply.setThread(message.getThread())
reply.setBody("Received '"+message.getBody()+"', tyvm")
out ! reply
case _ =>
Console.println("Received something other than Message")
}
case _ =>
Console.println("Received something other than (Packet, actor)")
}
}
}
).start
}
}
(Ceci a été pris de http://github.com/Communitivity/MinimalScalaXMPPComponent/blob/master/src/org/communitivity/echoxmpp/Main.scala)
L'acteur et regarde des trucs métacaractères comme un très bon moyen d'écrire des composants de manière évolutive. Je n'ai pas été capable de trouver des bibliothèques d'acteurs C# qui ont l'air mature, et l'apprentissage d'Axum semble être exagéré.
Quelle serait la bonne façon d'attaquer ceci en C#? (en ignorant le code spécifique à XMPP, bien sûr - je suis plus intéressé par ce à quoi ressemblerait la version C# des acteurs et la correspondance des modèles).
Je ne suis pas vraiment sûr de ce qui se qualifie comme une réponse ici. C# a quelques extensions qui favorisent un style de programmation fonctionnel mais c'est toujours un langage impératif. Je pense que la fonctionnalité dans cet exemple n'est pas si difficile à reproduire, mais ce sera soit un style impératif, ou kludgy pour imiter les fonctionnalités du langage fonctionnel. –