Scala 如何调试隐式转换--隐式转换代码的显示展示

方法1

在需要隐式转换的地方,把需要的参数显示的写出。

方法2,查看编译代码

在terminal中 利用 scalac -Xprint:typer xxx.scala方法打印添加了隐式值的代码示例。

对于复杂的工程来说,直接跑到terminal执行 scalac -Xprint:typer xxx.scala会报很多库不存在的错误。

BasicTest.scala:5: error: object scalatest is not a member of package org
import org.scalatest.funsuite                                            
           ^                                                             
BasicTest.scala:6: error: object apache is not a member of package org
import org.apache.log4j.Logger                                        
           ^                                                          
BasicTest.scala:7: error: object json4s is not a member of package org
import org.json4s._                                                   
           ^                                                          
BasicTest.scala:8: error: object json4s is not a member of package org
import org.json4s.JsonDSL._     

可在idea的设置中,找到如下配置,写入-Xprint:typer
在这里插入图片描述
再到要调试的文件页面,进行编译(快捷键Ctrl+Shift+F9)。然后编译结果就会打印,比如我的如下代码:

  test("json字段覆盖测试"){
    var json = ("name" -> "joe") ~ ("age" -> 35)
    LOGGER.info(compact(render(json)))
    json ~ ("age" -> 38)

    LOGGER.info(compact(render(json)))

    var json2=parse("{\"name\":\"joe\",\"age\":35}")
    json2 = json2 merge render("height",175)

  }

编译输出:

    BasicTest.this.test("json�ֶθ���")({
      var json: org.json4s.JsonAST.JObject = org.json4s.JsonDSL.pair2Assoc[String](scala.Predef.ArrowAssoc[String]("name").->[String]("joe"))({
  ((x: String) => org.json4s.JsonDSL.string2jvalue(x))
}).~[Int](scala.Predef.ArrowAssoc[String]("age").->[Int](35))({
        ((x: String) => org.json4s.JsonDSL.string2jvalue(x))
      }, {
        ((x: Int) => org.json4s.JsonDSL.int2jvalue(x))
      });
      BasicTest.this.LOGGER.info(org.json4s.jackson.JsonMethods.compact({
        <artifact> val x$1: org.json4s.JsonAST.JObject = json;
        <artifact> val x$2: org.json4s.Formats = org.json4s.jackson.JsonMethods.render$default$2(x$1);
        org.json4s.jackson.JsonMethods.render(x$1)(x$2)
      }));
      org.json4s.JsonDSL.jobject2assoc(json).~(org.json4s.JsonDSL.pair2jvalue[Int](scala.Predef.ArrowAssoc[String]("age").->[Int](38))({
        ((x: Int) => org.json4s.JsonDSL.int2jvalue(x))
      }));
      BasicTest.this.LOGGER.info(org.json4s.jackson.JsonMethods.compact({
        <artifact> val x$3: org.json4s.JsonAST.JObject = json;
        <artifact> val x$4: org.json4s.Formats = org.json4s.jackson.JsonMethods.render$default$2(x$3);
        org.json4s.jackson.JsonMethods.render(x$3)(x$4)
      }));
      var json2: org.json4s.JValue = org.json4s.jackson.JsonMethods.parse(org.json4s.`package`.string2JsonInput("{\"name\":\"joe\",\"age\":35}"), org.json4s.jackson.JsonMethods.parse$default$2, org.json4s.jackson.JsonMethods.parse$default$3);
      json2 = JsonAST.this.JValue.j2m[org.json4s.JValue](json2).merge[org.json4s.JValue, org.json4s.JsonAST.JValue]({
        <artifact> val x$5: org.json4s.JsonAST.JObject = org.json4s.JsonDSL.pair2jvalue[Int](scala.Tuple2.apply[String, Int]("height", 175))({
          ((x: Int) => org.json4s.JsonDSL.int2jvalue(x))
        });
        <artifact> val x$6: org.json4s.Formats = org.json4s.jackson.JsonMethods.render$default$2(x$5);
        org.json4s.jackson.JsonMethods.render(x$5)(x$6)
      })(JsonAST.this.JValue.jjj[org.json4s.JValue, org.json4s.JValue])
    })((Position.apply("BasicTest.scala", "Please set the environment variable SCALACTIC_FILL_FILE_PATHNAMES to yes at compile time to enable this feature.", 27): org.scalactic.source.Position))
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值