Вы не должны оборачивать код в class
в первую очередь.В вашем коде нет ООП, поэтому класс также не нужен.Кроме того, gets
возвращает строку, в то время как для number
вам, вероятно, понадобится целое число.
Здесь будет [более или менее] рубиновая версия вашего кода:
print "How many gemstones do you want to enter? "
# ⇓⇓⇓⇓⇓ get rid of trailing CR/LF
# ⇓⇓⇓⇓ convert to integer
gemstoneNumber = gets.chomp.to_i
gemstones =
1.upto(gemstoneNumber).map do |i|
puts
puts "Please enter data for the gemstone ##{i}:"
print "What is the name of the gemstone? "
name = gets.chomp # shave the trailing CR/LF off
print "What is the color of the gemstone? "
color = gets.chomp
print "What is the price of the gemstone? "
price = gets.chomp.to_f # convert to float
# in Ruby we normally use hashes to store
# the named values
{name: name, color: color, price: price}
end
puts "You entered #{gemstoneNumber} gemstones. They are:"
gemstones.each do |gemstone|
puts "Name: #{gemstone[:name]}. " \
"Color: #{gemstone[:color]}. " \
"Price: $#{gemstone[:price]}."
end
В качестве альтернативы вы можете использовать класс вместо хеша для хранения информации о драгоценном камне.
Чтобы отсортировать драгоценные камни по имени:
puts "You entered #{gemstoneNumber} gemstones. They are:"
# ⇓⇓⇓⇓⇓⇓⇓ HERE
gemstones.sort_by { |gemstone| gemstone[:name] }.each do |gemstone|
puts "Name: #{gemstone[:name]}. " \
"Color: #{gemstone[:color]}. " \
"Price: $#{gemstone[:price]}."
end
Хорошая документацияперечисления можно найти в официальных документах ruby: https://ruby -doc.org / core / Enumerable.html # method-i-sort_by (и около того)