을 설명해주십시오 :나는이 방법의 별에 관한 질문이이 방법
def multiplies_array(*numbers)
numbers.inject(1, :*)
end
인수 목록 (*numbers
)에서 별의 의미는 무엇입니까? 콜론 다음에 별의 의미는 무엇입니까 (1, :*
)?
을 설명해주십시오 :나는이 방법의 별에 관한 질문이이 방법
def multiplies_array(*numbers)
numbers.inject(1, :*)
end
인수 목록 (*numbers
)에서 별의 의미는 무엇입니까? 콜론 다음에 별의 의미는 무엇입니까 (1, :*
)?
첫 번째 별은 표시 연산자입니다. 이 경우 multiplies_array
에 주어진 모든 매개 변수를 단일 배열로 "수집"합니다. 네 개의 매개 변수를 이런 식으로 호출
multiplies_array 1, 2, 3, 4
은 ... 당신에게 방법에 네 개의 요소를 하나의 배열을 제공합니다.
def multiplies_array(numbers) # Without splat operator
end
multiplies_array [1, 2, 3, 4]
두 번째 스타는 약간의 혼란 :
이 동일합니다. 여기서 곱셈 연산자는 다음을 의미합니다.
:
은 기호를 나타냅니다. 모든 Enumerable
메서드는 심볼을 바로 가기로 전달할 수 있습니다. 이것은 "이 이름으로 메소드 호출"을 의미합니다.
즉, *
메서드는 numbers 배열의 각 항목에 적용됩니다. 나는 그것은 "모든 요소를 결합 inject.
에 대한 설명서를 참조하십시오이 모두 루비의 마법 :
... 감사합니다! :) –
다른 작은 질문. % w (끝 넘음) .include? (string [index]) % w 란 무엇입니까? –
@JohnOggy 다른 질문으로 게시하십시오. '% w '란 무엇입니까? –
에 약간의 실마리를 희망
numbers.inject(1) { |result, number| result * number) }
: 같은 기호 바로 가기없이 그 선이 보일 것이다 블록이나 메서드 또는 연산자의 이름을 나타내는 기호로 지정된 이진 연산을 적용하여 열거 형을 지정합니다. "
그러므로 :*
은 곱셈 연산자를 numbers.inject(1, :*)
에 지정하고 있습니다. :*
은 심볼로 지정하지만 numbers.inject(1, '*')
도 지정할 수 있습니다. 기호를 사용하는 것은 더 관용적입니다.
첫 번째 것은 "splat operator", google입니다. 두 번째 것은 일반적인 기호입니다 ('Enumerable # inject'에 대한 문서를 참조하십시오.) –