programing

ActiveSupport :: Memoizable은 어떤 Ruby memoize 패턴을 참조합니까?

javaba 2021. 1. 15. 19:11
반응형

ActiveSupport :: Memoizable은 어떤 Ruby memoize 패턴을 참조합니까?


따라서 Rails 3.2에서는 ActiveSupport :: Memoizable이 더 이상 사용되지 않습니다.

메시지는 다음과 같습니다.

DEPRECATION WARNING: ActiveSupport::Memoizable is deprecated and
will be removed in future releases,simply use Ruby memoization
pattern instead.

"루비 메모 화 패턴"(단수)을 우리 모두가 알고 참조해야하는 패턴이 하나있는 것처럼 참조합니다.

나는 그들이 다음과 같은 것을 의미한다고 생각합니다.

def my_method
  @my_method ||= # ... go get the value
end

또는

def my_method
  return @my_method if defined?(@my_method)

  @my_method = # ... go get the value
end

내가 놓친 다른 것이 있습니까?


다음은 Memoizable이 더 이상 사용되지 않는 커밋 (및 후속 논의)입니다. https://github.com/rails/rails/commit/36253916b0b788d6ded56669d37c96ed05c92c5c

저자는 @foo ||= ...접근 방식을 옹호하고 마이그레이션의 예 로서이 커밋가리 킵니다 . https://github.com/rails/rails/commit/f2c0fb32c0dce7f8da0ce446e2d2f0cba5fd44b3 .

편집 :이 변경 사항을 모든 인스턴스 memoize가이 패턴으로 대체 될 수 있거나 대체되어야한다는 의미로 반드시 해석되는 것은 아닙니다 . 나는 Memoizable이 Rails 코드 자체에서 더 이상 필요 / 원하지 않는다는 의미로 읽었습니다. 의견이 지적했듯이 Memoizable은 단순한 래퍼 그 이상 @foo ||= ...입니다. 이러한 기능이 필요한 경우 계속해서 Memoizable을 사용하면 ActiveSupport 이외의 다른 곳에서 가져와야합니다 (아직없는 경우 누군가가 gem 버전을 포크 할 것입니다).


또 다른 옵션은 Memoist gem을 사용하는 것입니다.

직접 추출 ActiveSupport::Memoizable하여 드롭 인 교체로 사용할 수 있습니다. 그냥 require 'memoist'바꾸고

extend ActiveSupport::Memoizable

...에

extend Memoist

상위 답변에 추가하여 클래스 메서드를 메모하려면 다음 패턴을 사용하십시오.

class Foo
  class << self
    def bar
      @bar ||= begin
        # ...
      end
    end
  end
end

avaynshtok가 위에 언급 한 커밋 에 대한 주석을 기반으로 다음 과 같이 진행합니다.

ActiveSupport::Deprecation.silence { extend ActiveSupport::Memoizable }

Memoizable내 RSpec 제품군의 ActiveSupport가 언제 시작 게이트에서 곧바로 사라지는 지 알 수 있기 때문 입니다.

참조 URL : https://stackoverflow.com/questions/9132197/which-ruby-memoize-pattern-does-activesupportmemoizable-refer-to

반응형

'programing' 카테고리의 다른 글

자바 이벤트 디스패치 스레드 설명  (0) 2021.01.15
boost :: scoped_ptr의 차이점  (0) 2021.01.15
여러 인덱스로 메시 렌더링  (0) 2021.01.15
박쥐 파일의 이스케이프 퍼센트  (0) 2021.01.15
세트 멤버의 TTL  (0) 2021.01.15