문제

IronRuby의 DateTime이 객체 [] 샘플 코드 인 이유를 설명 할 수 있습니까?

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
도움이 되었습니까?

해결책

사용 [] 일반 유형의 경우 Ruby의 정당한 구문이지만 현재 동작 (사용 [] 비 게 니체 유형의 경우) 열린 버그가 있습니다. http://ironruby.codeplex.com/workitem/view.aspx?workitemid=3355

루비에서는 사각형 괄호가 사용됩니다 인덱싱 배열로, 유형 배열을 정의하지 마십시오 ... 루비 어레이의 유형을 정의 할 필요가 없습니다. 루비는 과부하를 허용합니다 [] 모든 물건과 루비에 대한 것을 의미합니다 Class 물체는 의미가 없습니다 [], 그래서 우리는 정의했습니다 [] 일반적인 유형을 얻는 것을 의미합니다. 그것을 명심하십시오 of 방법은 사용하는 것이 선호되는 방법입니다. [] Ironpython과의 편의성과 유사한 구문을 위해서만 있습니다.

다른 팁

System :: Object []는 실제로 배열 유형이 아니기 때문입니다. t.is_a? (System :: DateTime []) 진실도 돌아올 것입니다.

여기서 일어나는 일은 Ironruby가 정사각형 브래킷을 빈 일반 유형 표시기로 간주한다는 것입니다 (예 : 일반 유형을 만드는 것은 동일한 구문으로 수행되기 때문에 시스템 :: 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top