2013-05-24 2 views
3
루비의 #tap 방법 상당

루비 기본 값을 수정하지 않은 채 값의 파이프 라인을 관찰 할 수있는 방법을 갖는다 :스칼라

# Ruby 
list.tap{|o| p o}.map{|o| 2*o}.tap{|o| p o} 

스칼라에서 이러한 방법이 있는가? 나는 이것을 Kestrel Combinator라고 불렀지 만 확신 할 수는 없다고 생각합니다. 여기

+2

당신은 스칼라 황조롱이 콤비 구글나요? 이게 도움이 되나요? http://stackoverflow.com/a/9673294/1339987 – djechlin

+0

@djechlin 아니, "조롱하는 모조품을 조롱하다"에서 검색하고 Kestrel을 썼지 만 Google을 잊어 버렸습니다. 정확히 내가 무엇을 찾고 있었는지. –

+0

[kestrel을 스칼라로 사용하기위한 블로그 포스트] (http://debasishg.blogspot.ru/2009/09/side-effects-with-kestrel-in-scala.html)도 있습니다. 불행히도, scala는 그런 것들을 즉시 사용할 수 없습니다. –

답변

4

GitHub의에 하나의 구현된다 https://gist.github.com/akiellor/1308190

여기에 재현 :

import collection.mutable.MutableList 
import Tap._ 

class Tap[A](any: A) { 
    def tap(f: (A) => Unit): A = { 
    f(any) 
    any 
    } 
} 

object Tap { 
    implicit def tap[A](toTap: A): Tap[A] = new Tap(toTap) 
} 

MutableList[String]().tap({m:MutableList[String] => 
    m += "Blah" 
}) 

MutableList[String]().tap(_ += "Blah") 

MutableList[String]().tap({ l => 
    l += "Blah" 
    l += "Blah" 
}) 
+0

암시 적 클래스가있는 동일한 버전을 추가하면 탭 [a]라는 암시 적 변환이 발생하고 클래스 Tap의 메소드 탭이 약간 흐릿해질 수 있습니다. – 4lex1v