Я думаю, что термин, который вы ищете, является переменной областью действия - другими словами, вы ищете способы ограничить область действия i
и j
. Но вам не нужно беспокоиться об этом. Проблема под рукой требует создания отдельных методов - независимо от области видимости.
Это улучшит удобочитаемость, поскольку позволит читателю обрабатывать код, начиная с высокого уровня, а затем углубляясь только по мере необходимости. Это также улучшит тестируемость, потому что ваши маленькие методы будут делать ровно одну вещь .
def calc_first_nucleotide_position(po)
i = po.first
while nucleotide_at_position(i-1) == nucleotide_at_position(i)
raise "Assumption violated" if i == 1
i -= 1
end
i
end
# etc...
first_nucleotide_position = calc_first_nucleotide_position(positions)
last_nucleotide_position = calc_last_nucleotide_position(positions)
# etc...