README.md 1.6 KB
Newer Older
梦境迷离's avatar
梦境迷离 已提交
1 2 3 4 5 6
# scala-macro-tools

scala macro and abstract syntax tree learning code.

# @toString

梦境迷离's avatar
梦境迷离 已提交
7 8 9
- NOTE
    - Automatically ignore when use on `case` class.
    - Contains constructor parameters which have `val`/`var` modifier and class internal fields.
梦境迷离's avatar
梦境迷离 已提交
10 11
    - The existing custom `toString` method will fail to compile.

梦境迷离's avatar
梦境迷离 已提交
12
- source code1
梦境迷离's avatar
梦境迷离 已提交
13
```scala
梦境迷离's avatar
梦境迷离 已提交
14
@toString(isContainsCtorParams = true)
梦境迷离's avatar
梦境迷离 已提交
15 16 17 18 19
class TestClass(val i: Int = 0, var j: Int) {
  val y: Int = 0
  var z: String = "hello"
  var x: String = "world"
}
梦境迷离's avatar
梦境迷离 已提交
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
// result of scalac
class TestClass extends scala.AnyRef {
  <paramaccessor> val i: Int = _;
  <paramaccessor> var j: Int = _;
  def <init>(i: Int = 0, j: Int) = {
    super.<init>();
    ()
  };
  val y: Int = 0;
  var z: String = "hello";
  var x: String = "world";
  override def toString(): String = scala.collection.immutable.List(i, j, y, z, x).toString.replace("List", "TestClass") // a crude way, TODO refactor it.
}

//println(new TestClass(1, 2)) 
//TestClass(1, 2, 0, hello, world)
梦境迷离's avatar
梦境迷离 已提交
36
```
梦境迷离's avatar
梦境迷离 已提交
37 38

- source code2
梦境迷离's avatar
梦境迷离 已提交
39
```scala
梦境迷离's avatar
梦境迷离 已提交
40 41 42 43 44 45 46
@toString
class TestClass(val i: Int = 0, var j: Int) {
  val y: Int = 0
  var z: String = "hello"
  var x: String = "world"
}
// result of scalac
梦境迷离's avatar
梦境迷离 已提交
47 48 49 50 51 52 53 54 55 56
class TestClass extends scala.AnyRef {
  <paramaccessor> val i: Int = _;
  <paramaccessor> var j: Int = _;
  def <init>(i: Int = 0, j: Int) = {
    super.<init>();
    ()
  };
  val y: Int = 0;
  var z: String = "hello";
  var x: String = "world";
梦境迷离's avatar
梦境迷离 已提交
57
  override def toString(): String = scala.collection.immutable.List(y, z, x).toString.replace("List", "TestClass") // a crude way, TODO refactor it.
梦境迷离's avatar
梦境迷离 已提交
58
}
梦境迷离's avatar
梦境迷离 已提交
59 60
//println(new TestClass(1, 2))
//TestClass(0, hello, world)
梦境迷离's avatar
梦境迷离 已提交
61 62
```