`rescue` 메소드의 변수에 오류 객체를 할당하는 데 사용되는 구문(=>)은 무엇입니까?
-
13-12-2019 - |
문제
그만큼 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}
.