Я обнаружил ошибку, что без завершающего числа [0-9] мой метод не удастся.Поэтому я использовал быстрый gsub для вставки этого числа.
Я работаю с этим методом:
def initialize(speciate)
y = speciate.gsub(/$/, '1')
x = y.scan(/[A-za-z]*\d+/)
@chem_species = x.map { |chem| chem.scan(/[A-Z][^A-Z]*/) }.flatten
end
Когда я проверяю переменные в irb: (Это работает)
ruby-head > speciate = "NaCl"
=> "NaCl"
ruby-head > y = speciate.gsub(/$/, '1')
=> "NaCl1"
ruby-head > x = y.scan(/[A-za-z]*\d+/)
=> ["NaCl1"]
ruby-head > @chem_species = x.map { |chem| chem.scan(/[A-Z][^A-Z]*/) }.flatten
=> ["Na", "Cl1"]
Когда я запускаю метод вirb: (не получается)
ruby-head > x = Chemical.new("NaCl")
=> #<Chemical:0x0000010084d0b8 @chem_species=[]>
x = Chemical.new("H2SO4")
=> #<Chemical:0x000001008467e0 @chem_species=["H2", "S", "O4"]>
Заранее спасибо!