0

IronRubyのDateTimeがObject[]サンプルコードである理由を誰かが説明できますか

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
4

2 に答える 2

1

System ::Object[]は実際には配列型ではないためです。t.is_a?(System :: DateTime [])もtrueを返します。

ここで起こることは、IronRubyが四角い括弧を空のジェネリック型インジケーターと見なしていることだと思います(ジェネリック型の作成は同じ構文で行われるため、たとえば、System :: Collections :: Generic :: List [String] .new)。

そのための正しい方法は次のとおりです。

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
于 2009-12-03T11:22:21.140 に答える
1

ジェネリック型に使用[]することはRubyにとって正当な構文ですが、([]非ジェネリック型で使用する)現在の動作は未解決のバグです:http://ironruby.codeplex.com/WorkItem/View.aspx?WorkItemId = 3355

Rubyでは、角かっこは配列へのインデックス作成にのみ使用され、型配列を定義することはありません...Ruby配列の型を定義する必要がないためです。Rubyでは[]、任意のオブジェクトに対してどのような意味でもオーバーロードできますが、RubyのClassオブジェクトには意味がないため、ジェネリック型を取得することを意味するように[]定義しました。[]このof方法が推奨される方法であることに注意してください。[]本当に便利で、IronPythonと同様の構文のためだけにあります。

于 2009-12-29T04:17:36.283 に答える