수색…


비고

원숭이 패치에는 편리하지만 몇 가지 함정이 있습니다. 가장 주목할만한 것은이 예에서와 같은 패치가 전역 범위를 오염시키는 것입니다. 두 모듈이 모두 Hash#symbolize 추가하면 필요한 마지막 모듈 만 실제로 변경 사항을 적용합니다. 나머지는 지워집니다.

또한 패치 된 메소드에 오류가있는 경우 stacktrace는 패치 된 클래스를 가리 키기 만합니다. 이것은 Hash 클래스 자체에 버그가 있음을 의미합니다 (현재 있음).

마지막으로 Ruby는 어떤 컨테이너를 사용할 지 매우 융통성이 있기 때문에 작성시 매우 간단하게 보이는 메소드는 정의되지 않은 기능이 많이 있습니다. 예를 들어, Array#sum 만드는 것은 숫자 배열에 적합하지만 사용자 정의 클래스의 배열이 제공되면 중단됩니다.

더 안전한 대안은 Ruby> = 2.0에서 사용할 수있는 상세 검색입니다.

기능 추가

내장형이든 아니든간에 Ruby의 모든 클래스에 메소드를 추가 할 수 있습니다. 호출 객체는 self 사용하여 참조됩니다.

class Fixnum
  def plus_one
    self + 1
  end

  def plus(num)
    self + num
  end

  def concat_one
    self.to_s + '1'
  end
end

1.plus_one # => 2
3.plus(5) # => 8
6.concat_one # => '61'


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow