Operatoren als Methodenparameter in C #

8

Ich denke nicht, dass es möglich ist, Operatoren als Parameter für Methoden in C # 3.0 zu verwenden, aber gibt es eine Möglichkeit, diesen oder irgendeinen syntaktischen Zucker nachzuahmen, der es so aussehen lässt, als ob es so läuft?

Ich frage, weil ich kürzlich den Soushombinator in C # implementiert habe aber während der Übersetzung Raganwalds Ruby-Beispiel

%Vor%
  

Was lautet "Nimm die Zahlen von 1 bis 100, behalte die ungeraden, nimm die Summe davon und beantworte dann das Quadrat dieser Zahl."

Ich habe die Symbol # to_proc Sachen knapp. Das ist das & amp ;: in der select(&:odd?) und der inject(&:+) oben.

    
Jonas Elfström 06.10.2009, 21:57
quelle

2 Antworten

8

Nun, in einfachen Worten können Sie einfach ein Lambda verwenden:

%Vor%

Das ist allerdings nicht sehr aufregend. Es wäre schön, wenn all diese Delegierten für uns vorgefertigt wären. Natürlich könnten Sie dies mit einer statischen Klasse tun:

%Vor%

Tatsächlich hat Marc Gravell in MiscUtil , wenn Sie schauen möchten. Sie könnten dann anrufen:

%Vor%

Es ist nicht gerade hübsch, aber es ist das nächste, was im Moment unterstützt wird, glaube ich.

Ich fürchte, ich verstehe das Ruby-Zeug wirklich nicht, also kann ich dazu nichts sagen ...

    
Jon Skeet 06.10.2009, 22:09
quelle
2

Das Folgende ist direkt, wörtlich (so viel wie möglich) C # -Übersetzung:

%Vor%

Speziell:

  • Blöcke: {||} - werden Lambdas: =>
  • select wird Where
  • inject wird Aggregate
  • into wird zu einem direkten Aufruf einer Lambda-Instanz
Pavel Minaev 06.10.2009 22:39
quelle

Tags und Links