숫자를 구문 분석해야하는 * nix "hostname"명령으로 채워지는 문자열이 있습니다. 그것은 쉬운 부분입니다. 어려움은 포착 된 숫자에 수학 (수학)을해야 할 필요성에서옵니다. 분명히 정규식 캡처는 항상 'add'또는 'modulo'와 같은 수학 함수가 없으며 '.to_i'에 대한 메소드도 가지고 있지 않은 MatchData 유형입니다. 현재 캡처 한 숫자에 대해 수학 (tm)을 수행하려면 MatchData의 .to_s 메서드를 사용하여 캡처를 문자열로 변환 한 다음 String의 .to_i를 사용하여 정수로 만들어야합니다. 내 질문은, 이것을하는 더 좋은 방법은 무엇입니까?루비 정규식 MatchData 대 정수 변환
hostname = "webserver1337.mycorp.com"
number = hostname.match(/[a-z]+/)
puts "#{number}, with class #{number.class}" # prints '1337, with class MatchData'
somevar = number + 1 # this will fail horribly
temp1 = number.to_s
number = temp1.to_i
someothervar = number + 1
puts "#{number}, #{someothervar} with class #{number.class}" # prints '1337, 1338 with class FixNum'
이것은 약간 밉니다. 같은 것을 달성하는 더 낫고/더 깨끗한 방법이 있습니까?
귀하의 코드는 귀하가 말하는 것을하지 않았습니다. number == 웹 서버가 아님 1337 – shingara
정말로 'temp1'이 필요하지 않습니다 :'number = number.to_s.to_i'이면 충분합니다. –
Mark, 정확히 내가 뭘 찾고 있었는지 (물론, MatchData에 대한 .to_i 메쏘드가 존재할 것이지만 클래스를 패치하는 것은 ...이 스크립트에서 무거워진다.) 정말 고마워! –