그래서 정규식을 사용하여 Black Magic을 발명했습니다. 일부 커맨드 라인 인수를 구문 분석하려고하는데, 어떤 형식의 인수도 받아 들여야합니다. test[somethinginhere]
여기서 'somethinginhere'는 실행할 테스트의 이름입니다.Ruby Regex Black Magic
이것은 코드의 모양입니다. 더 많은 코드가 실제로 후 부울과 기능을 수행하지만, 이것은 인수를 처리하는 부분입니다. 이 프로그램은 소문자 's'를 포함하지 않는 모든 테스트 이름을 제대로 실행됩니다 : 검은 마법이 들어오는 곳
ARGV.each do |arg|
case arg.downcase
when "help"
@help = true
when "install"
@install = true
when "deploy"
@deploy = true
when "configure"
@configure = true
when /^test\[([a-z]+)\]$/
@test << arg.downcase[/^test\[([a-z]+)\]$/,1]
else
@usage = true
end
end
지금 여기.
$ ./AutoTest.rb test[a]
Running Test "ATest"
$ ./AutoTest.rb test[b]
Running Test "BTest"
$ ./AutoTest.rb test[anything]
Running Test "AnythingTest"
다음은 실패합니다 : 다음은 통과 할 것이다
$ ./AutoTest.rb test[s]
Usage: AutoTest [help|install|deploy|configure|test[*]]
을하지만이 통과 할 것이다 :
는 사실$ ./AutoTest.rb test[S]
Running Test "STest"
, 그것의 소문자의 내부에 아무것도 실패합니다
를$ ./AutoTest.rb test[user]
Usage: AutoTest [help|install|deploy|configure|test[*]]
대문자 : 다음에 올 수
$ ./AutoTest.rb test[uSer]
Running Test "UserTest"
유일한 결론이 정규식 마술의 비밀에 탭 가공이되어,이 시점에서 그것도 자신에 HTML을 구문 분석 할 수 있도록 강력한되고 있다는 점이다.
하지만 진지하게, 여기서 무슨 일이 벌어지고 있습니까?
아마 좋은 생각이다. 이것은'!'에서')'까지 * shifted-number * 부서의 거의 모든 것을 포함합니다. 왜 더 일반적인'--test = s' 나'test s' 타입의 문법을 사용하지 않을까요? – tadman
'test s'는 사용자가 여러 명령을 함께 묶을 수있게 허용하지 않기 때문에 작동하지 않습니다. './AutoTest.rb install deploy config config-all'을 실행하십시오. 그래서 나는 돌진과 함께 갈거야. –
여러 부분 인수를 처리 할 수 있도록 인수 파서를 다시 작성하면 작동합니다. 반면에'rake'를 예로 들자면'rake db : migrate'와 같이':'을 구분 기호로 사용하는 것이 좋습니다. – tadman