`rescue` 메소드의 변수에 오류 객체를 할당하는 데 사용되는 구문(=>)은 무엇입니까?

StackOverflow https://stackoverflow.com//questions/9686991

문제

그만큼 rescue 오류 객체를 참조하기 위해 변수를 할당할 수 있는 구문은 다음과 같습니다(=>)

rescue => e

만약에 rescue 일반적인 메소드 호출 중 하나입니다. 그 의미는 무엇입니까? =>.다른 메서드 호출에 동일한 구문을 사용할 수 있나요?

my_method arg1, arg2 => my_obj
도움이 되었습니까?

해결책

raise는 실제로 메소드 , rescue가 아닙니다.그것은 키워드이며 분석 ": 10467 .따라서, 당신이 가진 구문은 rescue (=> e가 어떤 종류의 메소드 인수가 아니기 때문에) 특별한 것이며, 메소드 자체에 유효하지 않습니다.Parser에서 rescue => e 구문 자체가 정의되어있는 방법 / 위치는 전적으로 확실하지 않습니다.

다른 팁

일부 축구 코치/철학자 왕이 말했듯이, 그것이 바로 그것입니다.여기 루비가 있어요 파싱.y.특히 흥미로운 것은 이 부분:

opt_rescue      : keyword_rescue exc_list exc_var then
                  compstmt
                  opt_rescue
                    ...
                | none
                ;

exc_list        : arg_value
                    ...
                | mrhs
                    ...
                | none
                ;

exc_var         : tASSOC lhs
                    ...
                | none
                ;

설명
exc_list 기본적으로 아무것도 허용하지 않거나 예외 유형 또는 다음과 같은 일련의 예외를 허용합니다. rescue ZeroDivisionError, LoadError

exc_var 아무것도 될 수 없거나 => some_variable

opt_rescue 그러므로 될 수 있다 rescue 그 자체로 또는 위의 둘 중 하나 또는 둘 다를 추가합니다.

그것은 오직 예외 할당을 위한 특수 구문으로 여기에 나열됩니다.유일한 다른 용도는 => 이다 키-값 연관.

또한 arg_value 그리고 mrhs 왼쪽에 있고 lhs 오른쪽에 있는데, 제가 아는 한 이 일이 일어나는 유일한 장소는 바로 여기입니다.내가 틀렸다면 누군가 나를 정정해 주지만,parse.y에는 다른 "역방향" 할당이 없습니다.

아니오, 구조의 구문은 거기에서만 사용됩니다.함수 호출에서 해시 로켓 '=>'을 사용하는 경우 해시로 해석되고 ARG2가 이전에 변수로 정의되지 않은 경우 오류가 발생합니다.

def foo(a,b)
  puts b.inspect
end

foo "bar", :baz => 5   #=> {:baz=>5}

foo "bar", baz => 5    #=> NameError: undefined local variable or method `baz'

baz = "flux"

foo "bar", baz => 5   #=> {"flux"=>5}
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top