본문 바로가기

Ruby on Rails

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

방금 겪은 기이한 일이다

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

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

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

이건 레일스의 버그겠지?


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

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

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

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

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

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

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

포럼글 링크