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가 언제 시작 게이트에서 곧바로 사라지는 지 알 수 있기 때문 입니다.
'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 |