Ruby의 메소드와 같은 해시 값에 액세스하는 방법
ActiveSupport::OrderedOptions
을 사용하십시오. 이 클래스는 Hash
에서 상속되며 동적 접근자 메서드를 제공합니다.일반적으로 해시를 사용하여 이 작업을 수행합니다.
person = {
name: "Jason",
company: "Basecamp"
}
person[:company] # 'Basecamp'
OrderedOptions
를 사용하면 다음과 같이 작성할 수 있습니다.require "active_support/ordered_options"
person = ActiveSupport::OrderedOptions.new
# set the values
person.name = "Jason"
person.company = "Basecamp"
# access the values
person.name # => 'Jason'
person.company # => 'Basecamp'
구현
배후에서 Rails는 Ruby의 메타프로그래밍을 사용하여 이 기능을 구현합니다.
method_missing
메서드를 사용하여 메서드 호출을 처리합니다.def method_missing(name, *args)
name_string = +name.to_s
if name_string.chomp!("=")
self[name_string] = args.first # set the value
else
bangs = name_string.chomp!("!")
# get the value
if bangs
self[name_string].presence || raise(KeyError.new(":#{name_string} is blank"))
else
self[name_string]
end
end
end
전체 소스 코드here를 읽을 수 있습니다. Ruby의 메타프로그래밍에 대한 자세한 내용은 Metaprogramming Ruby 2 책의 내 노트를 참조하십시오.
실제 사용
Propshaft은 Rails용 자산 파이프라인 라이브러리입니다. 새 구성 개체를 만드는 대신
OrderedOptions
를 사용하여 config.assets
설정을 정의합니다. Github에서 전체 소스를 읽을 수 있습니다.class Railtie < ::Rails::Railtie
config.assets = ActiveSupport::OrderedOptions.new
config.assets.paths = []
config.assets.excluded_paths = []
config.assets.version = "1"
config.assets.prefix = "/assets"
end
이제 모든 해시를
OrderedOptions
인스턴스로 교체해야 한다는 의미는 아닙니다. 구성과 유사한 개체와 함께 사용하는 것이 더 좋으며 종종 더 읽기 쉬운 코드가 됩니다.도움이 되길 바랍니다. 이 접근법에 대해 어떻게 생각하는지 알려주십시오.
Reference
이 문제에 관하여(Ruby의 메소드와 같은 해시 값에 액세스하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/software_writer/how-to-access-hash-values-like-methods-in-ruby-4b1k텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)