ОК, я укушу.
p Array.new(puts("How many elements?") || gets.to_i) {
puts("Are you entering in a string, an int or a float?") ||
case(gets.chomp)
when "string", "S" then (puts("Enter a string") || gets.chomp)
when "int", "INT" then (puts("Enter an integer") || gets.to_i)
when "float", "F" then (puts("Enter a float") || gets.to_f)
end
}
Следующий диалог:
How many elements?: 3
Are you entering in a string, an int or a float?: int
Enter an integer: 5
Are you entering in a string, an int or a float?: S
Enter a string: hi
Are you entering in a string, an int or a float?: F
Enter a float: 3.4
приведет к отображению (и возврату) следующего:
[5, "hi", 3.4]
Я использовал p
вместо puts
(который отображал бы элементы этого массива по одному на строку), чтобы прояснить, что это массив, который отображается. Обратите внимание, что каждый puts
во фрагменте возвращает nil
, поэтому nil || x #=> x
.
Этот фрагмент имеет восемь строк, но его можно уменьшить до одной, удалив символы новой строки:
p Array.new(puts("How many elements?") || gets.to_i) { puts("Are you entering in a string, an int or a float?") || case(gets.chomp) when "string", "S" then (puts("Enter a string") || gets.chomp) when "int", "INT" then (puts("Enter an integer") || gets.to_i) when "float", "F" then (puts("Enter a float") || gets.to_f) end }