2008/08/12 01:39
bs 는 궁금하다.
다음 코드가 에러를 발생하는 이유는?
- def method
-
false || return 0
- end
- SyntaxError: compile error
(irb):2: syntax error, unexpected tINTEGER, expecting kEND
from (irb):3
연산자 우선순위 때문인 것으로 생각된다.
and, or 와 &&, || 는 연산자 우선순위만 빼고 모든 것이 동일하다.
위 코드는 ruby에서 다음과 같이 해석하는 것으로 생각된다.
- def method
-
(false || return) 0
- end
왜 그럴까?
위 코드에 에러를 발생하지 않도록 하기 위해서는
- def method
-
false || (return 0)
- end
혹은
- def method
-
false or return 0
- end
와 같이 할 수 있다.
추가로 and, or와 &&, || 의 연산자 우선순위 사이에는 assignment 가 있다. 그래서 다음과 같은 코드도 원치 않는 결과를 보여줄 것이다. 이 글을 참조.
- total = shopping_cart.empty? and shopping_cart.total
이 글은 스프링노트에서 작성되었습니다.
'Ruby' 카테고리의 다른 글
| [ruby] RDOC 을 위한 주석 달기 (0) | 2009/02/23 |
|---|---|
| [Ruby] block expressions, 그리고 code block (0) | 2008/08/12 |
| [Ruby] or 와 || 의 차이 (0) | 2008/08/12 |
| wxRuby를 이용해 데스크탑 애플리케이션 만들기 (0) | 2008/08/06 |
| [Ruby] 디렉토리 모두 지우기 (0) | 2008/05/28 |
| [Ruby] inject 사용하기 (0) | 2008/05/28 |