Inject doppelter Ampersand-Operator

7

Ich habe einen inject Anruf

%Vor%

und möchten den Operator && zum injizieren wie in inject(0, :+) senden. Wie kann ich das tun?

    
zacsek 05.02.2014, 15:01
quelle

4 Antworten

10

Sie können nicht, weil && und || im Gegensatz zu anderen Operatoren keine syntaktischen Zucker für Methoden sind (dh es gibt keine Methode namens && oder || ), so dass Sie sie nicht mit referenzieren können ein Symbol.

Sie können jedoch vermeiden, inject zu verwenden, um die logische Konjunktion oder Disjunktion eines Arrays boolescher Werte zu berechnen, indem Sie sie durch all? bzw. any? ersetzen, da für jedes Array die folgenden Bedingungen gelten:

%Vor%

So könnte beispielsweise der von Ihnen gepostete Code wie folgt umgeschrieben werden:

%Vor%

Update : offensichtlich ist mein letztes Beispiel nicht der richtige Weg, um diese Berechnung auszudrücken, faltrus Antwort ist viel schneller:

%Vor% %Vor%     
toro2k 05.02.2014, 15:24
quelle
8

Wie wäre es mit Enumerable#all?

%Vor%

Wenn Sie inject verwenden möchten, müssen Sie eine Instanzmethode definieren.

%Vor%     
falsetru 05.02.2014 15:04
quelle
3

'& amp; & amp;' ist keine Methode, daher können Sie es nicht injizieren. Sie können jedoch & amp; Methode.

%Vor%

Was wird das gleiche tun

HINWEIS: Dies sollte jedoch nicht gemacht werden, da es extrem riskant ist und unerwartete Konsequenzen verursachen kann (wenn es in einer Sammlung ausgeführt wird, die mindestens einen nicht-booleschen Wert (true, false, nil) enthält). Sie sollten stattdessen immer any? oder all? Methoden verwenden.

    
BroiSatse 05.02.2014 15:13
quelle
0

inject(0, :+) würde alle Elemente des Arrays hinzufügen, unabhängig vom Inhalt der Elemente (ungerade, gerade usw.).

Wenn Sie inject(true, &:&&) (ich weiß, dass das nicht funktioniert) verwenden, sollte Ihr Array ein Array von booleschen Werten sein, damit Ihre Frage Sinn macht. Das wäre das gleiche wie: [true, false].all?

wichtig: Sie können Block Arg und Block nicht passieren, was bedeutet, dass Sie nicht überprüfen können, ob es sogar ein & amp; & amp; zur gleichen Zeit.

Wenn Sie darauf bestehen, versuchen Sie Folgendes:

%Vor%

Dies ist das Äquivalent von dem, was Sie verlangen (was ich immer noch nicht vollständig verstehe)

    
Abdo 05.02.2014 15:59
quelle

Tags und Links