Ruby에서 배열 생성 또는 추가


85
foo ||= []
foo << :element

약간 투박한 느낌입니다. 더 관용적 인 방법이 있습니까?


11
이것은 이다 숙어 방법. 으로 한 줄로 작성할 수 (foo ||= []) << :element있지만 더 추한 것으로 보입니다.
Sergio Tulentsev

4
IMO는 초기 값을 갖는 것입니다. 동일한 메소드 내에서 동일한 변수에 대해 || = 및 <<가있는 경우 IMO는 코드 냄새가 나고 이미 뭔가 잘못한 것입니다. 어떻게해야하는지 물어 보는 것은 실제 문제를 고치는 대신 화장품을하는 것입니다.
apeiros

답변:


142
(foo ||= []) << :element

그러나 meh. 읽을 수있게 유지하는 것이 정말 번거로운가요?


40
+1 "읽을 수있게 유지하는 것이 정말 번거로운가요?" 가독성이 가장 중요합니다.
The Tin Man

1
경우 foo자체가 당신이 값을 조회하는 (중첩) 해시 같은 더 복잡한 표현이며,이 값을 여러 번 찾는하거나 고개를 배열 값을 다른 변수 지출을 피할 수있는 좋은 방법입니다.
sschuberth

60

모든 배열에서도 항상 push 메서드를 사용할 수 있습니다. 나는 그것을 더 좋아한다.

(a ||= []).push(:element)

10

다음 과 같이 Kernel # Array 를 사용할 수도 있습니다.

# foo = nil
foo = Array(foo).push(:element)
# => [:element]

다음과 같이 잠재적 인 배열을 평면화하는 이점이 있습니다.

# foo = [1]
foo = Array(foo).push(:element)
# => [1, :element]

루비 에서 언제 가 정의되지 않은 것으로 foo = foo설정 foo되는 것이 항상 보장되는 것은 아닙니다 . 또한, 평평하지 않습니다 . 배열이면 반환 됩니다. nilfooKernel#Arrayfoofoo
Eric Duminil
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.