Rubby 호출 방법의 괄호 앞에 공백이 있으면 오류가 발생하는 이유
9082 단어 전문가가 되기 위한 루비 입문.Ruby
개시하다
루비에서 메서드가 호출되는 괄호 앞에 공백(공백)을 입력하면 오류가 발생할 수 있습니다.이 글에서 그 이유를 설명하다.
환경을 확인하다
이 글의 내용은 다음과 같은 환경에서 확인했다.
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]
사절하다
이 글은 개념 단계(이미지 단계)가 오류를 초래하는 원인을 설명했다.
이것은 Rubby Parer 동작을 정확하게 반영하는 설명이 아니니 미리 양해해 주십시오.
오류 발생 및 오류 없음 확인
매개 변수가 표준 출력의 값
puts
으로 전달되는 것을 표시하는 방법에서 여러 개의 매개 변수를 전달할 수 있다.두 개 이상의 매개 변수를 지정하면 변수의 내용과 줄 바꾸기가 출력을 교체합니다.
puts 1, 2, 3
#=> 1
# 2
# 3
물론 방법이 호출되는 괄호를 붙일 수도 있다.puts(1, 2, 3)
#=> 1
# 2
# 3
그러나 괄호 앞에 공백이 있으면 오류가 발생할 수 있습니다.puts (1, 2, 3)
#=> Traceback (most recent call last):
# 1: from /Users/jnito/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
# SyntaxError ((irb):3: syntax error, unexpected ',', expecting ')')
# puts (1, 2, 3)
# ^
그럼 괄호 앞에 빈칸이 있으면 틀릴까요?다음 코드는 정상적으로 실행될 것입니다.
puts (1 + 2 + 3)
#=> 6
puts (1, 2, 3)
가 잘못되고 puts (1 + 2 + 3)
가 되지 않는 이유는 무엇입니까?괄호 앞에 공백이 있으면 "공식을 그룹화한 괄호"로 해석됩니다.
이 이유는 간단히 말해서 루비의 경우 괄호 앞에 공간이 있다면 방법이 호출된 괄호가 아니라'공식을 그룹화한 괄호'다.
더 나아가
puts (1, 2, 3)
와 puts (1 + 2 + 3)
의 상태는 방법이 호출한 괄호와 생략된 것과 같다.생략을 보충하는 방법은 괄호를 호출한 후 위의 코드는 다음과 같다.
# putsの第1引数に(1, 2, 3)を渡す
puts((1, 2, 3))
# putsの第1引数に(1 + 2 + 3)を渡す
puts((1 + 2 + 3))
이때 괄호 안의 내용이 되돌아오는 값의'공식'이면 문법 오류가 발생하지 않고 정상적으로 실행할 수 있다(이 괄호는'조합 공식의 괄호'이기 때문이다).그러나
1, 2, 3
는 식이 아니다.irb에만 입력1, 2, 3
해도 문법 오류가 발생할 수 있습니다.1, 2, 3
#=> Traceback (most recent call last):
# 1: from /Users/jnito/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
# SyntaxError ((irb):1: syntax error, unexpected ',', expecting end-of-input)
# 1, 2, 3
# ^
따라서 puts (1, 2, 3)
괄호 내용은 공식이 아니어서 문법 오류가 발생한다.한편,
1 + 2 + 3
는 공식이기 때문에 수치를 되돌려준다.1 + 2 + 3
#=> 6
따라서 puts (1 + 2 + 3)
괄호의 내용은 공식이기 때문에 문법적으로 틀리지 않고 puts
방법의 매개 변수6
로 전달된다.발전
그럼 다음 두 코드가 어떤 결과인지 아세요?
puts (1 + 2 + 3) * 4
puts (1 + 2 + 3), 4
puts (1 + 2 + 3) * 4
는 (1 + 2 + 3) * 4
중의 공식으로 이것이 첫 번째 매개 변수이다.생략된 괄호를 보충하는 것은 다음과 같다.
puts((1 + 2 + 3) * 4)
이런 상황에서 (1 + 2 + 3) * 4
의 결과만 puts
의 매개 변수이기 때문에 출력은 다음과 같다24
.puts (1 + 2 + 3) * 4
#=> 24
한편, puts (1 + 2 + 3), 4
의(1 + 2 + 3)
는 첫 번째 파라미터이고, 4
는 두 번째 파라미터이다.쓴 것
puts((1 + 2 + 3), 4)
과 같은 것이다.따라서 출력은 다음과 같다
6
와 4
.puts (1 + 2 + 3), 4
#=> 6
# 4
발전의 두 번째
그럼 이제 아까 코드에서 괄호 앞 공간을 빼면 어떨까요?
puts(1 + 2 + 3) * 4
puts(1 + 2 + 3), 4
실제로 이 두 코드는 모두 정상적으로 집행할 수 없다.나는 다음에 그 이유를 설명한다.
puts(1 + 2 + 3) * 4
다음과 같이 실행할 때 오류가 발생할 수 있습니다(문법상 오류가 없지만 실제 실행 후 끝까지 정상적으로 실행할 수 없습니다).puts(1 + 2 + 3) * 4
#=> 6
# Traceback (most recent call last):
# 2: from /Users/jnito/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
# 1: from (irb):8
# NoMethodError (undefined method `*' for nil:NilClass)
우선 puts(1 + 2 + 3)
가 실행되고 이어서 puts
방법의 반환값nil
에 대한 집행* 4
이 이루어졌기 때문에 루비에게 "nil * 4
집행할 수 없다nil
, 방법이 정의되지 않았다"는 욕을 먹어 오류가 발생했다.다른 한편,
*
는 다음과 같은 문법 오류가 발생할 수 있다.puts(1 + 2 + 3), 4
#=> Traceback (most recent call last):
# 1: from /Users/jnito/.rbenv/versions/2.5.1/bin/irb:11:in `<main>'
# SyntaxError ((irb):9: syntax error, unexpected ',', expecting end-of-input)
# puts(1 + 2 + 3), 4
# ^
puts(1 + 2 + 3), 4
의식이 끝난 뒤 곧이어 puts(1 + 2 + 3)
나왔기 때문이다., 4
부분은 루비의 문법을 해석할 수 없기 때문에 문법 오류가 발생할 수 있습니다.총결산
따라서 이 글에서 루비는 괄호 앞에 들어갈 때 오류가 발생하는 방법을 설명했다.
내가 집필한 전문가가 되기 위한 루비 입문.에는 이 내용을 거의 설명하지 않았기 때문에 예상치 못한 잘못으로 괴로워하는 사람들이 종종 있다(설명이 부족해서 미안하다.
이 글에서 설명한 바와 같이 Ruby가 괄호 앞에 공간이 있는지의 여부는 프로그램의 해석 방법에 큰 변화가 있다.
"분명히 책의 내용대로 코드를 잘 입력했는데 왜 오류가 났을까!"이렇게 하면 괄호 앞에 빈칸이 있는지 확인하세요.
참고 문헌
이 글의 설명은 책'프로그래밍 언어 Rubby의 6.3.2항'필수 괄호'의 내용을 참고했다.
Reference
이 문제에 관하여(Rubby 호출 방법의 괄호 앞에 공백이 있으면 오류가 발생하는 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/jnchito/items/073629c361b29416b42c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)