IronRuby is_a avec DateTime
-
12-09-2019 - |
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
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