Сложно отлаживать. Переменные работают в irb, но метод не работает - PullRequest
0 голосов
/ 26 июля 2010

Я обнаружил ошибку, что без завершающего числа [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"]> 

Заранее спасибо!

1 Ответ

0 голосов
/ 26 июля 2010

Поскольку химические символы всегда представляют собой одну заглавную букву, за которой следуют ноль или более строчных букв, почему бы и нет:

molecule = 'NaCl'
molecule.scan(/[A-Z][a-z]*[0-9]*/)
=> ["Na", "Cl"]

molecule = 'H2SO4'
molecule.scan(/[A-Z][a-z]*[0-9]*/)
=> ["H2", "S", "O4"]

molecule = 'Na2S'
molecule.scan(/[A-Z][a-z]*[0-9]*/)
=> ["Na2", "S"]

molecule = 'H'
molecule.scan(/[A-Z][a-z]*[0-9]*/)
=> ["H"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...