Tôi có sau vĩ mô xác định một lớp học và trở về một thể hiện của lớp đó (với Scala 2.10.2 và các plugin vĩ mô):Phương pháp không thể được truy cập trong lớp tạo Macro
def test[T] = macro testImpl[T]
def testImpl[T : c.WeakTypeTag](c: Context): c.Expr[Any] = {
import c.universe._
val className = newTypeName("Test")
c.Expr { q"""
class $className {
def method = 1
}
new $className
"""}
}
Khi tôi gọi là vĩ mô :
case class Cat(name: String)
val t = test[Cat].method
tôi nhận được lỗi sau:
method method in class Test cannot be accessed in Test
val t = test[Cat].method
^
mục tiêu tổng thể của tôi là sử dụng vampire methods và sử dụng dấu ngoặc kép để mô tả lớp được tạo. Làm thế nào tôi có thể giải quyết lỗi này?
Lớp học tổng hợp của bạn có thể mở rộng một đặc điểm xác định 'phương thức' trừu tượng không? –
Không vì tôi cần phải tạo các phương thức đó với tên cụ thể. Và khi cố gắng làm điều đó tôi nhận ra rằng tôi thậm chí không thể truy cập các phương thức không được tạo ra. Tôi nghi ngờ rằng tôi không sử dụng dấu ngoặc kép đúng cách ở đây. – Eric
Tôi không có ý tưởng rằng bây giờ đã có một plugin trình biên dịch cho thiên đường vĩ mô (như trái ngược với bị buộc phải sử dụng một trình biên dịch chia hai). Nếu chỉ cho việc học đó, cảm ơn rất nhiều cho câu hỏi của bạn. –