240 发简信
IP属地:广东
  • 一个更加简单的实现方式是:

    package dummy

    import scala.quoted.*

    object Describer:

    enum ShowType:
    case TYPE_TREE
    case TYPE_REPR
    case OTHER

    inline def describe[T](showType: ShowType): String = showType match
    case ShowType.TYPE_TREE =>
    describeTree[T]
    case ShowType.TYPE_REPR =>
    describeRepr[T]
    case ShowType.OTHER =>
    "Not Supported"

    inline def describeRepr[T]: String = ${ describeReprImpl[T] }
    inline def describeTree[T]: String = ${ describeTreeImpl[T] }

    def describeTreeImpl[T: Type](using Quotes): Expr[String] =
    import quotes.reflect.*
    val tpt = TypeTree.of[T]
    Expr( tpt.show(using Printer.TreeStructure) )

    def describeReprImpl[T:Type] (using Quotes): Expr[String] =
    import quotes.reflect.*
    val tpe = TypeRepr.of[T]
    Expr( tpe.dealias.widen.show(using Printer.TypeReprStructure) )

    🍁 Scala3 macro & tasty 获取 TypeClass 描述信息

    1.概述 Scala3的Macro基于其引入的新的抽象类型结构 tasty,即:Typed Abstract Syntax Trees,其可以在编译之后,保留方法和类上的类型...

  • 这个 API 设计得很优雅。
    1. 将 API 拆分成可以多个原子性的职责(接口),每个职责都可以灵活的泛化实现,并自由组合。
    2. 链式 API 让代码更为简洁。

    命名方面,还有优化的空间,也可能是你的API文档写得还不够清晰:

    HttpUtils
    .createApi(waxiaoApi.class)
    .getBanner() // 不够通用
    .compose(... ) // compose的语义是什么?
    .subscribe(

    2022-01-25

    蛙笑网络请求优化方案 优化目的 解耦网络请求,解决嵌套地狱,减少内存泄漏 方案对比 原始请求方式: 改造完成的请求方式HttpUtils .createApi(...

  • 这套框架可以开源一下

    基于akka-actor的流计算引擎

    0 背景 术语表 术语备注akka一套运行于JVM上实现了Actor模型的Scala类库,用于构建高并发、基于消息驱动的分布式高性能应用YStream基于akka-clust...

  • 两种方式可能都存在一定的问题:例如 getClass( Map[String, String]() ) 是没获得更多的信息的,并不一定能够提供对应用用好的API。 scala 中更多使用 Context Bound 来应对。

    Scala 类型系统

    协变 Covariance https://docs.scala-lang.org/zh-cn/tour/variances.html[https://docs.scala-...

  • 发一个pr给scala-sql呗。

    使用 Macro 给 scala sql 增加 ORM 插入模式

    类似于 Hibernate 或者 JPA,定义一个 case class,例如 Person,然后实例化这个 case class后,直接调用 dataSource.save...

  • 使用 Macro 给 scala sql 增加 ORM 插入模式

    类似于 Hibernate 或者 JPA,定义一个 case class,例如 Person,然后实例化这个 case class后,直接调用 dataSource.save...

  • 记一次Jedis连接池泄漏的分析

    1. 背景 随着业务的快速发展,公司使用redis cluster+本地缓存的模式来化解大流量下对系统的冲击。redis客户端驱动采用的是市面上流行的jedis,版本为2.6...

  • 更准确的说法应该是predef的一个方法

    详解 Scala 中的 Context Bounds

    What is Context Bounds? 这是Scala 2.8 引入的新特性,通常与类型类模式(type class pattern)一起使用。一个 Context ...

  • implicitly 不是关键字

    详解 Scala 中的 Context Bounds

    What is Context Bounds? 这是Scala 2.8 引入的新特性,通常与类型类模式(type class pattern)一起使用。一个 Context ...

  • 这个是 Idea 编辑器的锅。 sbt compile 是没有问题的。 估计也是被两个T给 搞晕了。

    关于 Scala-Sql 库源码一处疑惑

    背景 本文使用的 scala-sql 是一个轻量级的 scala jdbc 库,它是一个简单的JDBC的封装,以提供类型安全的、简洁的scala API。整体使用上非常方便快...

  • Show code?

    关于 Scala-Sql 库源码一处疑惑

    背景 本文使用的 scala-sql 是一个轻量级的 scala jdbc 库,它是一个简单的JDBC的封装,以提供类型安全的、简洁的scala API。整体使用上非常方便快...

  • Scala 实用 Tips

    1.多条件过滤 使用尾递归的形式对给定值和多个 filter 条件来进行过滤,只要满足其一,即可返回 true 尾递归条件过滤 func 使用例子 该例子给定一个 Strin...

  • 非常全面的整理👍

    redis学习

    最近学习了一段时间的redis,以下是笔记,欢迎各位大佬们留言评论,若有不对的地方请指出,我会及时更正!蟹蟹大家! 目录: 1.redis简介 2.redis丰富的数据结构 ...

  • 很有价值的总结。可以补充一下jvm对类初始化的控制逻辑,以及如何使用jstack发现锁等待,死锁的方法,就更完美了。

    一个Lambda引发的坑

    1. 背景 上周有小伙伴反馈zk连接很慢。整理出zk连接的关键逻辑如下: 上面的代码造成第一次调用ClientZkAgent.getInstance的时候,需耗时10s, 这...

  • 120
    任何不讲方法的头脑风暴都是在强奸(创意)

    提笔“怒起”写下这篇文章是因为昨晚又被总监召集开了一场Brainstorming,唤名为“头脑风暴”,实质上通常这一轮风暴都会将我们的大脑回路搅成一团浆糊。 Brainsto...