Frage

I-Stecker oft vorkonfigurierte lambdas in zählbare Methoden wie ‚Karte‘, ‚wählen‘ usw. aber das Verhalten von ‚injiziert‘ scheint anders zu sein. z.B. mit

mult4 = lambda {|item| item * 4 }

dann

(5..10).map &mult4

gibt mir

[20, 24, 28, 32, 36, 40]

Allerdings, wenn ich ein 2-Parameter Lambda zur Verwendung mit einem inject wie so,

multL = lambda {|product, n| product * n }

Ich möchte sagen können

(5..10).inject(2) &multL

da 'Inject' ein optionales hat Single Parameter für den Anfangswert, aber das gibt mir ...

irb(main):027:0> (5..10).inject(2) &multL
LocalJumpError: no block given
        from (irb):27:in `inject'
        from (irb):27

Allerdings, wenn ich Sachen des '& multL' in ein zweiten Parameter zu injizieren, dann funktioniert es.

irb(main):028:0> (5..10).inject(2, &multL)
=> 302400

Meine Frage ist: „Warum funktioniert das nicht der vorherige Versuch?“

War es hilfreich?

Lösung

So ist der Grund dafür, dass

(5..10).map &mult4

Arbeiten und

(5..10).inject(2) &multL

tut, ist nicht, dass Rubin Pars im ersten Fall implizit ist, so ist es wirklich bedeutet

(5..10).map(&mult4)

Wenn Sie, für den zweiten Fall wollte könnten Sie

(5..10).inject 2, &multL

Die außerhalb der Pars Trick funktioniert nur für die Blöcke auf ein Verfahren, nicht Lambda-Objekte übergeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top