Ruby 이해 - 열거 가능 - 강제

6315 단어 railsruby

소개


Enumerable . Ruby의 가장 강력한 기능 중 하나입니다. 프로그래밍에서 대부분의 시간이 항목 모음을 다루기 때문에 얼마나 자주 사용되는지 놀랄 일이 아닙니다.

어려움



기초

Ruby의 기능에 필요한 약간의 지식. 이 포스트는 Ruby 프로그래머를 위한 기초적이고 기본적인 지식에 초점을 맞춥니다.

필수 읽기:





  • 열거 가능


    Enumerable는 컬렉션 작업을 위한 여러 메서드가 포함된 인터페이스 모듈입니다. 많은 Ruby 클래스는 컬렉션처럼 보이는 Enumerable 인터페이스를 구현합니다. each 메서드가 지원하는 경우 Enumerable 가능성이 있으며 그 때문에 Ruby에서 매우 보편적입니다.

    Note: This idea was partially inspired by Lamar Burdette's recent work on Ruby documentation, but takes its own direction.



    강제



    아마도 Enumerable 전혀 원하지 않을 수도 있습니다. 다른 유형으로 변경하는 방법이나 오히려 강제하는 방법도 있습니다.

    #to_a / #항목


    to_a 는 컬렉션을 Array 로 강제 변환합니다. 이것은 Array 에는 그다지 유용하지 않지만, 다른 컬렉션 유형에는 EnumerableHash 와 같은 Set 가 있습니다.

    require 'set'
    
    Set[1, 2, 3].to_a
    # => [1, 2, 3]
    
    { a: 1, b: 2, c: 3 }.to_a
    # => [[:a, 1], [:b, 2], [:c, 3]]
    


    그 용도는 "상자에 있는 것"입니다. Array 무언가가 필요하다면 to_a

    #to_h


    to_h는 매우 유사하며 컬렉션을 Hash로 강제 실행합니다.

    [[:a, 1], [:b, 2], [:c, 3]].to_h
    # => [[:a, 1], [:b, 2], [:c, 3]]
    


    당신이 할 수 있는 한 가지 흥미로운 것은 each_with 메소드를 사용하여 멋진 일을 하는 것입니다.

    %i(a b c).each_with_index.to_h
    # => {:a=>0, :b=>1, :c=>2}
    
    %i(a b c).each_with_object(:default).to_h
    # => {:a=>:default, :b=>:default, :c=>:default}
    


    그것만으로도 흥미롭지만 과거에 Ruby에서 인식할 수 있는 패턴이 있습니다.

    %i(a b c).map { |v| [v, 0] }.to_h
    # => {:a=>0, :b=>0, :c=>0}
    
    # Remember, `map` returns an `Array`
    { a: 1, b: 2, c: 3 }.map { |k, v| [k, v + 1] }.to_h
    # => {:a=>2, :b=>3, :c=>4}
    


    그 외to_h는 무엇을 합니까? 블록 기능이 필요합니다.

    %i(a b c).to_h { |v| [v, 0] }
    # => {:a=>0, :b=>0, :c=>0}
    
    { a: 1, b: 2, c: 3 }.to_h { |k, v| [k, v + 1] }
    # => {:a=>2, :b=>3, :c=>4}
    


    ... 꽤 멋집니다. GrantedHash는 현재 transform_values도 가지고 있으며, 이는 특정 변환에 대한 더 나은 아이디어일 수 있지만 요점은 파악합니다.
    to_hto_a 가 필요할 때 Hash 와 마찬가지로 훌륭합니다. 그것은 거기에 도달하기 위한 더 많은 힘을 가지고 있으며 결과적으로 당신이 그것으로 할 수 있는 많은 깔끔한 일들입니다.

    마무리



    이것으로 Enumerable 섹션을 마치고 새로운 주제로 넘어갈 것입니다!

    내가 작성하고 작업 중인 내용을 최신 상태로 유지하고 싶으십니까? Take a look at my new newsletter: The Lapidary Lemur

    좋은 웹페이지 즐겨찾기