標準の mixin とは少し異なることを実現したいと考えています。拡張するクラス (またはトレイト) のフィールドに基づいて新しいフィールドが計算されるトレイトを構築したいと考えています。
たとえば、次のようなクラスがあるとします。
class Point {
var x: Int = 0
var y: Int = 0
}
そして、私はこのようなクラスを作りたかった:
class Point' {
var x: Int = 0
var y: Int = 0
var myx: Int = 0
var myy: Int = 0
}
myx
フィールド名を計算し、myy
それらを特性を使用してクラスに混合する関数を記述できるようにしたいと考えています。ここに私がやりたいことのために作られた疑似Scalaがあります:
def addMy(cls: Class) {
newFields = cls.fields.map( f => createField("my" + f.name, f.type) )
myTrait = createTrait(newFields)
extendClass(cls, myTrait)
}