Skip to content

Instantly share code, notes, and snippets.

@piyo7
Last active August 29, 2015 14:07
Show Gist options
  • Save piyo7/11704b373d5ea9082daf to your computer and use it in GitHub Desktop.
Save piyo7/11704b373d5ea9082daf to your computer and use it in GitHub Desktop.
Scalaのリフレクションでメソッド一覧をテキスト出力 ref: http://qiita.com/piyo7/items/0218c01b6cd524326908
sbt.version=0.13.6
name := "hello_universe"
version := "1.0"
scalaVersion := "2.11.2"
libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value
import scala.reflect.runtime.universe._
printMethods[List[Int]]
...
addString(b: StringBuilder): StringBuilder
addString(b: StringBuilder, sep: String): StringBuilder
addString(b: StringBuilder, start: String, sep: String, end: String): StringBuilder
aggregate[B](z: => B)(seqop: (B, A) => B, combop: (B, B) => B): B
andThen[C](k: B => C): PartialFunction[A,C]
apply(n: Int): A
applyOrElse[A1][B1](x: A1, default: A1 => B1): B1
asInstanceOf[T0]: T0
...
object HelloUniverse extends App {
implicit class RichList[T](self: List[T]) {
def mkStringIfNonEmpty[T](start: String,
seq: String,
end: String): String =
if (self.nonEmpty) self.mkString(start, seq, end)
else ""
}
import scala.reflect.runtime.universe._
def paramToString(param: Symbol): String =
(if (param.isImplicit) "implicit " else "") +
param.name +
": " +
param.typeSignature
def methodToString(method: MethodSymbol): String =
method.name.decodedName +
method.typeParams.map(
_.name
).mkStringIfNonEmpty("[", "][", "]") +
method.paramLists.map(
_.map(paramToString).mkString(", ")
).mkStringIfNonEmpty("(", ")(", ")") +
": " +
method.returnType
def printMethods[T: TypeTag] =
typeOf[T].
members.
filter(_.isMethod).
map(_.asMethod).
map(methodToString).
toArray.
sorted.
foreach(println)
printMethods[List[Int]]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment