하나의 컨트롤러에 같은 메소드가 두개가 들어가도 에러가 안나다니 --;;;

Ruby on Rails 2007.03.19 03:26
방금 겪은 기이한 일이다

플러그인을 깔다가 컨트롤러에 메소드들을 수동으로 설명서를 보면서 추가 하다가
교체해야되는 메소드를 추가를 해버렸다.

그런데 에러는 안나고 깔끔하게 돌아가면서 교체해야 할 놈이 아래에 있었는데 그 놈만 돌아가면서 계속 엉뚱한 값만 보여주는것이다

한참을 고생하다가 찾아낸 후에 위치를 바꿔보니 일므이 같은 메소드중에 아래에 있는 놈이 돌고 위에 있는 놈은 먹통이다.

이건 레일스의 버그겠지?


...........................

이 이야길 루비포럼에 올렸더니 루비는 원래 그렇단다.
고수들께서 이런 답변들을 해주셨다.

"루비에서는 에러가 아닙니다. 동일한 이름으로 여러번 정의한 경우 마지막 정의된 내용으로 overwrite 됩니다.
이 것은 비단, method 뿐 아니라, class에도 모두 적용됩니다.
이렇게 함으로 써, 이미 존재하는 내용을 필요에 따라 재정의하여 쓸 수 있는 장점이 있습니다. "

"루비의 클래스는 항상 열려 있습니다. 그래서 이미 정의된 클래스에 얼마든지 메서드를 추가할 수 있습니다. 내가 정의한 클래스가 아니라 내장 클래스, 심지어는 Object, Kernel, Module 등에도 메서드를 마음껏 추가할 수 있습니다. 다른 언어, 특히 정적 언어와 구분되는 루비의 특징입니다."

아직 내 수준에서는 왜 그래야만하는지 잘  이해가 가지 않는 부분인데 언제쯤 이해가 갈지 ㅎㅎ

...............................

포럼에 다시 새로운 답변이 올라왔다 ^^
스캐폴딩에서 이미 만들어진 메소드들을 지우지 않고 내가 새로 만든 메소드로 대치될때 그때가 저런 같은 이름의 메소드가 에러없이 나중것으로 자연스럽게 대치되는 상황을 만들어 낸다고 한다.

포럼글 링크
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 : Comment 0

Write a comment