Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby 인터프리터 옵션 및 올바르게 사용하는 방법

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의 명령줄 옵션에 대해 배웠습니다. 이 플래그는 모두 유용할 수 있습니다. 사용해 보세요!

이 기사를 공유하는 것을 잊지 마세요. 그래서 더 많은 사람들이 혜택을 받을 수 있습니다.

읽어주셔서 감사합니다 🙂