Ruby 이해 - 열거 가능 - 강제
소개
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
에는 그다지 유용하지 않지만, 다른 컬렉션 유형에는 Enumerable
및 Hash
와 같은 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_h
는 to_a
가 필요할 때 Hash
와 마찬가지로 훌륭합니다. 그것은 거기에 도달하기 위한 더 많은 힘을 가지고 있으며 결과적으로 당신이 그것으로 할 수 있는 많은 깔끔한 일들입니다.
마무리
이것으로 Enumerable
섹션을 마치고 새로운 주제로 넘어갈 것입니다!
내가 작성하고 작업 중인 내용을 최신 상태로 유지하고 싶으십니까? Take a look at my new newsletter: The Lapidary Lemur
Reference
이 문제에 관하여(Ruby 이해 - 열거 가능 - 강제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/baweaver/understanding-ruby-enumerable-coercion-56ji
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Note: This idea was partially inspired by Lamar Burdette's recent work on Ruby documentation, but takes its own direction.
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]]
[[:a, 1], [:b, 2], [:c, 3]].to_h
# => [[:a, 1], [:b, 2], [:c, 3]]
%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}
%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}
%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}
이것으로
Enumerable
섹션을 마치고 새로운 주제로 넘어갈 것입니다!내가 작성하고 작업 중인 내용을 최신 상태로 유지하고 싶으십니까? Take a look at my new newsletter: The Lapidary Lemur
Reference
이 문제에 관하여(Ruby 이해 - 열거 가능 - 강제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/baweaver/understanding-ruby-enumerable-coercion-56ji텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)