スカラのパターンマッチングを使用したいスカラコードがあります。コードが行うことは、クラスのパブリックゲッターを取得し、メソッド名をjsonキーとして、メソッド値をjson値(オブジェクトまたは配列の場合はシリアル化)として追加することです。ここでは、コードがあります:スカラ:式に基づいた一致
private def serialize(any: Any): JsonObject = {
val json = new JsonObject()
val rm = scala.reflect.runtime.currentMirror
val accessors = rm.classSymbol(any.getClass).toType.members.collect {
case m: MethodSymbol if m.isGetter && m.isPublic => m
}
val instanceMirror = rm.reflect(any)
for (accessor <- accessors) {
val key = properCase(accessor.name.toString)
val value = instanceMirror.reflectMethod(accessor).apply()
if (accessor.returnType <:< typeOf[String])
json.addProperty(key, value.asInstanceOf[String])
else if (accessor.returnType <:< typeOf[Character])
json.addProperty(key, value.asInstanceOf[Character])
else if (accessor.returnType <:< typeOf[Boolean])
json.addProperty(key, value.asInstanceOf[Boolean])
else if (accessor.returnType <:< typeOf[Number])
json.addProperty(key, value.asInstanceOf[Number])
else if (accessor.returnType <:< typeOf[Iterable[Any]])
json.add(key, serialize(value.asInstanceOf[Iterable[Any]]))
else
json.add(key, serialize(value.asInstanceOf[Any]))
}
json
}
私はこのような何かをしたいと思います:
accessors match {
case _.returnType <:< typeOf[String] => json.addProperty(
properCase(key.name.toString),
instanceMirror.reflectMethod(accessor).apply().asInstanceOf[String])
...
}
しかし、コンパイラはその'=>' expected but '.' found
を言って、それに非常に不幸です。私は、コンパイラがmatch文の中の式を期待しておらず、(javaのように)定数を求めていると仮定します。スカラのマッチスタイル構文を式で使用する方法はありますか?
を書くのか? –
@JeanLogeart質問を更新しました。 – cscan