Frage

Kann jemand erklären, warum in Datetime IronRuby ist Object [] Beispielcode

IronRuby 0.9.1.0 on .NET 2.0.50727.4927
Copyright (c) Microsoft Corporation. All rights reserved.

>>> require 'System'
=> true
>>> t = System::DateTime.Now
=> Thu Dec 03 15:32:42 +05:00 2009
>>> t.is_a?(Time)
=> true
>>> t.is_a?(System::DateTime)
=> true
>>> t.is_a?(System::Object)
=> true
>>> t.is_a?(System::Object[])
=> true
>>> t.is_a?(System::Decimal)
=> false
War es hilfreich?

Lösung

Mit [] für generische Typen ist eine berechtigte Syntax für Ruby, aber das aktuelle Verhalten Sie (mit [] auf einem nicht-generic-Typ) sehen, ist ein offener Fehler: http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=3355

In Ruby sind eckige Klammern nur für Indizierung in ein Array verwendet wird, kein Typ-Array definieren ... da es keine Notwendigkeit gibt, den Typen eines Ruby-Array zu definieren. Ruby ermöglicht Überlastung, was [] Mittel gegen ein beliebiges Objekt und Rubys Class Objekt hat keine Bedeutung für [], so haben wir [] einen generischen Typ bedeuten definiert bekommen. Beachten Sie, dass die of Methode ist die bevorzugte Methode zu verwenden; [] ist wirklich nur dort für die Bequemlichkeit und ähnliche Syntax mit Ironpython.

Andere Tipps

Weil System :: Object [] ist nicht wirklich ein Array-Typ. t.is_a? (System :: Datetime []) kehrt auch wahr.

Ich denke, dass das, was hier passiert, ist, dass IronRuby die eckigen Klammern als leere generischen Typ Indikatoren betrachtet (weil eine generische Art zu schaffen, mit der gleichen Syntax durchgeführt wird, zum Beispiel, System :: Sammlungen :: Allgemeine :: Liste [Zeichenfolge] .new ).

Der richtige Weg, dies zu tun, ist wie folgt:

IronRuby 0.9.3.0 on .NET 2.0.50727.4927
Copyright (c) Microsoft Corporation. All rights reserved.

>>> t = System::DateTime.new
=> 01/01/0001 00:00:00
>>> t.is_a? System::Array.of(System::Object)
=> false
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top