sourcecode

루비 앰퍼샌드 콜론 바로가기

codebag 2023. 6. 2. 20:27
반응형

루비 앰퍼샌드 콜론 바로가기

중복 가능성:
루비에서 지도(&:name)는 무엇을 의미합니까?

루비에서, 내가 만약 한다면, 나는 알고 있습니다.

some_objects.each(&:foo)

와 같습니다.

some_objects.each { |obj| obj.foo }

그것은,&:foo블록을 생성합니다.{ |obj| obj.foo }프로세스로 변환하여 각 프로세스에 전달합니다.왜 이것이 작동합니까?루비만의 특별한 경우인가요, 아니면 이것이 그대로 작동하는 이유가 있나요?

말하자면 당신의 질문은 틀렸습니다.여기서 일어나는 일은 "암퍼샌드와 대장"이 아니라 "암퍼샌드와 개체"입니다.이 경우 콜론은 기호를 위한 것입니다.그래서.&그리고 있습니다.:foo.

&호출들to_proc개체에 대해 블록으로 전달합니다.루비에서.to_proc에 구현됨Symbol이 두 호출이 동일하도록 합니다.

something {|i| i.foo }
something(&:foo)

요약하자면:&호출들to_proc객체에 대한 블록으로 메서드에 전달하고 Ruby는 이를 구현합니다.to_procSymbol.

앰퍼샌드와 심볼의 조합은 특별한 것이 없습니다.다음은 (ab) 정규식을 사용하는 예입니다.

class Regexp
  def to_proc
    ->(str) { self =~ str ; $1 }
  end
end
%w(station nation information).map &/(.*)ion/

=> ["stat", "nat", "informat"]

아니면 정수.

class Integer
  def to_proc
    ->(arr) { arr[self] }
  end
end

arr = [[*3..7],[*14..27],[*?a..?z]]
arr.map &4
=> [7, 18, "e"]

필요한 사용자arr.map(&:fifth)있을 때arr.map &4?

언급URL : https://stackoverflow.com/questions/1961030/ruby-ampersand-colon-shortcut

반응형