각 배열 항목을 매개변수로 사용하여 메서드를 호출하는 Ruby 단축키
&:
를 알고 있을 것입니다. 예를 들어, 이 코드 조각은 to_s
및 :foo
에서 :bar
메서드를 호출합니다.[:foo, :bar].each(&:to_s)
위의 코드는 다음과 유사합니다.
[:foo, :bar].each do |item|
item.to_s
end
그러나 배열 항목에서 메서드를 호출하는 대신 메서드를 호출하고 배열 항목을 해당 메서드에 전달하려고 합니다. 그것에 대한 하나의 라이너가 있습니까?
[:foo, :bar].each do |item|
puts(item)
end
Ruby에는 이를 정확하게 수행할 수 있는 해당 단축키
&method
가 있습니다.[:foo, :bar].each(&method(:puts))
여기에서 두 가지 일이 진행되고 있습니다.
먼저
method(:puts)
는 puts
라는 메서드를 찾습니다. 설명서에 따라 self
를 호출한 개체에서 인스턴스 변수 및 method
메서드에 액세스할 수 있습니다.Looks up the named method as a receiver in obj, returning a
Method
object (or raisingNameError
). TheMethod
object acts as a closure in obj's object instance, so instance variables and the value ofself
remain available.
둘째,
Method
메서드(와우, 너무 많은 메서드 중 하나입니다)에서 반환된 method
객체는 to_proc
메서드를 구현하므로 &
다음에 사용할 수 있습니다. 즉, 다음과 같습니다.If
foo
is an object with ato_proc
method, then you can pass it to a method as&foo
, which will callfoo.to_proc
and use that as the method's block.
&method(:puts) # is equivalent to
{ |e| puts(e) }
&:name # is equivalent to
{ |e| e.name }
&method(:puts)
라고 말하면 Method
개체를 찾아 .to_proc
를 호출합니다.array.each(&method(:foo))
는 다음과 같습니다.
array.each { |e| foo(e) }
그만한 가치가 있습니까?
이제
each
루프의 명시적 메서드 호출을 이 한 줄짜리로 대체한다는 의미인가요? 아마 아닐 겁니다.경우에 따라 명시적 메서드 호출은 코드를 읽기 쉽고 이해하기 쉽게 유지하는 데 필요한 것입니다. 동료뿐만 아니라 미래의 당신을 위해서. 이 한 줄짜리를 사용하면 두뇌가 수행하는 작업을 번역하고 이해하는 데 추가적인 정신적 오버헤드가 추가되는데, 이는 많은 경우에 가치가 없습니다.
그러나 때때로 이 지름길은 의도한 바를 표현하는 데 정확히 필요한 것입니다. 그래서 제가 루비를 좋아합니다. 소프트웨어를 작성하기 위해 원하는 대로 선택하고 실행하고 말할 수 있는 자유입니다.
어쨌든 도움이 되길 바랍니다.
Reference
이 문제에 관하여(각 배열 항목을 매개변수로 사용하여 메서드를 호출하는 Ruby 단축키), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/software_writer/ruby-shortcut-to-call-a-method-with-each-array-item-as-parameter-29fp텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)