Question

Quelqu'un peut-il expliquer pourquoi DateTime dans IronRuby est l'objet [] exemple de code

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
Était-ce utile?

La solution

Utilisation [] pour les types génériques est une syntaxe justifiable pour Ruby, mais le comportement actuel que vous voyez (en utilisant [] sur un type non générique) est un bug ouvert: http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId=3355

Dans Ruby, les crochets ne sont utilisés que pour l'indexation dans un tableau, définit pas un type tableau ... car il n'y a pas besoin de définir le type d'un tableau Ruby. Ruby permet une surcharge tout [] moyens contre tout objet, et l'objet Class Ruby n'a pas de sens pour [], nous avons donc défini [] signifie obtenir un type générique. Gardez à l'esprit que la méthode de of est la méthode préférée à utiliser; [] est vraiment là que pour la commodité et la syntaxe similaire avec IronPython.

Autres conseils

Parce que System :: Object [] est pas vraiment un type de tableau. t.is_a? (System :: DateTime []) retournera vrai.

Je pense que ce qui se passe ici, est que IronRuby considère les crochets comme indicateurs de type générique vides (car la création d'un type générique est fait avec la même syntaxe, par exemple, System :: Collections :: Generic :: liste [chaîne] .new ).

La bonne façon de le faire est la suivante:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top