Skip to content

Instantly share code, notes, and snippets.

@danhper
Created May 5, 2013 10:03
Show Gist options
  • Save danhper/5520374 to your computer and use it in GitHub Desktop.
Save danhper/5520374 to your computer and use it in GitHub Desktop.
Scala implicit method
object Foo {
implicit def foo(): Unit = println("foo")
def bar(implicit f: () => Unit) = f()
}
object Main {
def main(args: Array[String]): Unit = {
Foo.bar
}
}
@xuwei-k
Copy link

xuwei-k commented May 5, 2013

呼び出すときのスコープにimplicitなvalやdefが必要なので、この場合は以下のようにimport Foo._というのが必要です。もしくはimplicit def foo() を、べつな場所に定義するとか

object Foo {
  implicit def foo(): Unit = println("foo")

  def bar(implicit f: () => Unit) = f()
}

object Main {
  def main(args: Array[String]): Unit = {
    import Foo._
    Foo.bar
  }
}

@danhper
Copy link
Author

danhper commented May 5, 2013

なるほど、メソッドが定義するスコープにあっても呼び出すスコープにそれをインポートしないとダメということですね。http://www.scala-lang.org/node/114の例だと定義してるスコープと呼び出してるスコープが同じだったので、混乱しちゃいました。
ありがとうございます!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment