Scala は初めてなので、 、 、 で遊んでいfold
ましreduce
たscan
。関数パラメーターで要素が渡される順序と、最終結果がどのように組み立てられるかを確認したかったのです。数値と文字列のリストで使用する予定だったので、型パラメーターを使用して次のヘルパー関数を定義しました。
scala> def vizAdd[A](p1:A, p2:A):A = {
| val res:A = p1 + p2
| println( s" * ($p1, $p2) => $res" )
| res
| }
<console>:8: error: type mismatch;
found : A
required: String
val res = p1 + p2
^
Scala でジェネリック型パラメーターを使用したPost Additionは解決策を提案し、+ メソッドが操作するには数値型が必要であるという事実に焦点を当てているため、Numeric[A] 型の暗黙のパラメーターをメソッドに追加することでうまくいくはずです。不運にも:
scala> def vizAdd[A](p1:A, p2:A)(implicit n: Numeric[A]):A = {
| val res:A = p1 + p2
| println( s" * ($p1, $p2) => $res" )
| res
| }
<console>:8: error: type mismatch;
found : A
required: String
val res:A = p1 + p2
^
[A:Numeric]
in instead を使用した構文(implicit n: Numeric[A])
も機能しません...
上記の投稿(以下のコード) で実装されているシングルトン オブジェクト「GenericTest」をコンパイルすると、同じエラー「検出: A、必要: 文字列」が発生します。
object GenericTest extends App {
def func1[A](x: A, y: A)(implicit n: Numeric[A]): A = x + y
}
ここで何が欠けていますか?
私はScala 2.11.5を使用しています