Machen Sie FalseClass verhalten sich wie TrueClass mit Meta-Programmierung

8

Dies ist eine theoretische Frage: Ist es möglich, das Verhalten von FalseClass so zu ändern, dass es wie TrueClass funktioniert? Es ist möglich, to_s, xor, & amp; | zu überschreiben Verhalten, aber das ist nicht genug.

Wenn Sie Test Driven Development möchten, folgen Sie dem Vorschlag meines Kollegen:

%Vor%

Behauptungen funktionieren nicht, oder? Ist es möglich, den Test erfolgreich zu bestehen?

    
Edvinas Bartkus 05.05.2010, 09:14
quelle

2 Antworten

9

Es ist nicht möglich. Eine Möglichkeit, darüber nachzudenken, ist, dass es keine Methode Object#truthiness? gibt, die neu definiert werden könnte.

Im Rubin-MRT ist der Wahrheitstest der RTEST Makro, das fest verdrahtet ist und nichts anderes als Qfalse und Qnil bedeutet, wobei die beiden Konstanten false und nil entsprechen. Sie müssten dies ändern, um zu definieren, was "truthig" ist oder nicht.

    
Marc-André Lafortune 05.05.2010, 13:56
quelle
2

Es ist zumindest in der offiziellen Ruby-Implementierung unmöglich, dass die wahre und die falsche Logik tief in den C-Teilen (Qtrue und Qfalse) sind. Der Assert-Durchlauf würde jedoch durch Überschreiben von Assert funktionieren. Sie könnten auch etwas wie ruby2ruby verwenden, um alle Werte zu analysieren, aber als true würde sich immer noch nicht wie false verhalten und Aussagen wie ![] würden immer noch wahr zurückgeben. Beachten Sie auch, dass sich alle anderen Objekte auch in if-Anweisungen und in acin wie "true" verhalten.

    
Konstantin Haase 05.05.2010 15:18
quelle

Tags und Links