Массив может быть инициализирован при помощи new Object {}
синтаксис.
, Например, массив String
может быть объявлен также:
String[] s = new String[] {"One", "Two", "Three"};
String[] s2 = {"One", "Two", "Three"};
Примитивы могут также быть так же инициализированы любой:
int[] i = new int[] {1, 2, 3};
int[] i2 = {1, 2, 3};
Или массив приблизительно Object
:
Point[] p = new Point[] {new Point(1, 1), new Point(2, 2)};
Все подробности о массивах в Java выписан в Глава 10: Массивы в Спецификации языка Java, Третий Выпуск .
require 'time'
def to_something(str)
if (num = Integer(str) rescue Float(str) rescue nil)
num
elsif (tm = Time.parse(str)) == Time.now
# Time.parse does not raise an error for invalid input
str
else
tm
end
end
%w{12012 1233.22 12:21:22 10/10/2009 Test}.each do |str|
something = to_something(str)
p [str, something, something.class]
end
Результаты в
["12012", 12012, Fixnum]
["1233.22", 1233.22, Float]
["12:21:22", Sat Sep 12 12:21:22 -0400 2009, Time]
["10/10/2009", Sat Oct 10 00:00:00 -0400 2009, Time]
["Test", "Test", String]
Обновление для ruby 1.9.3: класс Time в stdlib теперь выдает исключение, если он не может проанализировать строку, поэтому:
def to_something(str)
duck = (Integer(str) rescue Float(str) rescue Time.parse(str) rescue nil)
duck.nil? ? str : duck
end
У меня нет полного решения, но это может помочь вам начать работу. Вы можете автоматически перейти от записи примера к массиву объектов Class в строковое представление, по крайней мере для некоторых типов, а затем преобразовать строки ...
$ irb
>> t = { "String" => "string", "Fixnum" => "integer", "Float" => "float" }
=> {"Float"=>"float", "Fixnum"=>"integer", "String"=>"string"}
>> ["xyz", 123, 123.455].map { |x| t[x.class.to_s] }
=> ["string", "integer", "float"]
Фактически, вы можете напрямую сопоставить классы:
$ irb
>> t = { String => "string", Fixnum => "integer", Float => "float" }
=> {String=>"string", Float=>"float", Fixnum=>"integer"}
>> ["xyz", 123, 123.455].map { |x| t[x.class] }
=> ["string", "integer", "float"]