Ruby 인터프리터는 Ruby 코드를 읽고 실행하는 프로그램입니다.
하지만...
기본 Ruby 인터프리터(MRI)에는 흥미롭고 유용한 명령줄 옵션이 많다는 것을 알고 계셨습니까?
좋아요 :
ruby -v
현재 사용 중인 Ruby 버전을 알려줍니다.
또는 -e
파일 없이 irb
에 들어갈 필요 없이 약간의 코드를 직접 실행할 수 있는 플래그 .
좋아요 :
ruby -e 'puts 123'
-h
를 사용하여 이러한 플래그를 찾을 수 있습니다. .
--help
에서만 볼 수 있는 "숨겨진" 플래그가 있습니다. .
다음은 제가 생각하는 표입니다...
가장 흥미로운 플래그 :
플래그 | 설명 |
---|---|
-v | Ruby 버전 인쇄 |
-c | 구문 검사 |
-e | 코드 직접 실행 |
-w | 경고 활성화 |
-r | 파일/젬 필요 |
-나 | 로드 경로에 디렉토리 추가 |
–고정 문자열 리터럴 사용 | 모든 문자열 고정 |
–파싱 트리 덤프 | 파싱 트리 표시 |
이 플래그 중 일부에 집중하여 작동 방식을 살펴보겠습니다!
구문 확인
코드가 있고 구문이 올바른지 알고 싶다면 -c
를 사용할 수 있습니다. CLI 옵션.
예 :
ruby -c code_without_syntax_errors.rb # Syntax OK ruby -c code_with_syntax_errors.rb # syntax error, unexpected tIDENTIFIER, expecting end-of-input
간단하지만 작동합니다 🙂
빠른 요구
때로는 파일 상단에 "require"를 쓰지 않고도 일시적으로 보석을 Ruby 프로그램에 요구하고 싶을 때가 있습니다.
디버깅 보석처럼.
예 :
ruby -rpry code.rb
매우 유용합니다!
경고 플래그
경고 플래그를 사용하면 린트가 활성화되고 코드에 발생할 수 있는 문제가 표시됩니다.
예:이 코드 :
p @test
ruby -w
를 사용할 때 다음 경고를 출력합니다. :
warning: instance variable @test not initialized
이것은 좋은 경고입니다!
값을 먼저 지정하지 않고 인스턴스 변수를 사용하려고 할 수 있기 때문입니다.
또는 인스턴스 변수 이름에 오타가 있을 수 있습니다. 이 플래그는 문제가 되기 전에 찾을 수 있습니다.
수정은 간단합니다 :
@test = nil
다음은 또 다른 예입니다.
c = 1
이렇게 하면 :
warning: assigned but unused variable - c
이 경고를 수정하려면 변수를 삭제하거나 사용할 수 있습니다.
이것은 로컬 변수에서만 작동합니다. .
그러나 블록 인수 내에서 사용하지 않는 인수를 밑줄(_
).
예 :
{ chocolate: 82 }.map { |k, _| k }
이것은 Ruby의 일반적인 규칙입니다.
_
특별한 것이 아니라 단지 유효한 변수 이름일 뿐입니다.
경고 예 추가
다음 코드의 결과는 메서드에서 반환되지 않거나 변수에 할당되지 않습니다.
2 * 2
Ruby가 이 항목을 좋아한다는 알림 :
warning: possibly useless use of * in void context
수정?
쓸모없는 문장은 삭제하거나 변수에 할당하세요.
이제 이 방법을 살펴보겠습니다. :
def orange(weight, quantity) # ... end
orange
을 호출하는 다양한 방법이 있습니다. :
orange 100, 2 orange(100, 2) orange *[100, 2] orange(*[100, 2])
orange *[100, 2]
를 사용하는 경우 경고가 활성화되면 다음을 얻습니다.
warning: '*' interpreted as argument prefix
무슨 일이야?
모호함.
Ruby는 당신이 orange * [100, 2]
를 의미한다고 생각합니다. , orange *[100, 2]
대신 .
*
사이의 공백 &[
*
를 연결하기 때문에 차이가 있습니다. 배열(splat 연산자)이 누락되었거나 *
라고 생각하는 경우 존재하는 경우 메소드 호출입니다.
그렇습니다. 이 경우 공간이 중요합니다.
다른 방법으로 메서드를 호출하여 이 경고를 수정할 수 있습니다.
지금 :
-w
를 사용하여 자신의 코드를 실행하십시오. 일부 경고를 제거하여 플래그를 지정하고 개선하십시오. 🙂
읽기-평가-인쇄-루프
아마도 irb와 pry에 익숙할 것입니다. 둘 다 우리가 REPL이라고 부르는 것입니다.
-n
사용 -e
와 결합된 플래그 매우 적은 코드로 유사한 효과를 얻을 수 있습니다.
예시 :
echo 'bacon\nchocolate\norange' | ruby -ne 'puts $_.upcase' # BACON # CHOCOLATE # ORANGE
이것은 echo
에서 입력을 받습니다. , 그런 다음 각 줄에 대해 코드를 호출합니다(puts $_.upcase
).
$_
위치 gets
에서 읽은 마지막 입력 값을 포함하는 특수 변수입니다. .
고정 문자열 리터럴 플래그
Ruby 2.3은 고정 문자열 리터럴 "magic comment"를 도입했습니다.
이렇게 생겼어요 :
# frozen_string_literal: true
모든 문자열을 고정합니다. , 변경할 수 없도록 만듭니다.
이를 수행하는 또 다른 방법은 --enable frozen-string-literal
을 전달하는 것입니다. Ruby에 플래그를 지정합니다.
이 코드 :
str = "abcdef" str[0] = "b"
해당 플래그를 사용할 때 다음 오류가 발생합니다.
can't modify frozen String (FrozenError)
하지만 문자열을 변경해야 하는 경우에는 어떻게 해야 합니까?
이렇게 하면 됩니다 :
str = "abcdef".dup
또는 이것 :
str = +"abcdef"
둘 다 작업할 고정되지 않은 문자열을 제공합니다.
요약
버전 플래그, 경고 플래그 및 고정 문자열 리터럴을 포함한 Ruby의 명령줄 옵션에 대해 배웠습니다. 이 플래그는 모두 유용할 수 있습니다. 사용해 보세요!
이 기사를 공유하는 것을 잊지 마세요. 그래서 더 많은 사람들이 혜택을 받을 수 있습니다.
읽어주셔서 감사합니다 🙂