scala 擴充套件方法學習
阿新 • • 發佈:2021-06-27
scala 的擴充套件方法很強大,類似C# 提供的擴充套件方法能力,基於scala 的擴充套件方法我們可以方便的開發一個dsl 模型
比如以下就是基於implicit 實現一個簡單的字串轉為自定義任務的處理
參考程式碼
package com.dalongdemo
object DSL extends App{
class Task(name:String) {
def invoke():Unit ={
println(s"method is called ${name}")
}
}
implicit class in(string: String) {
def in(fn: (String)=>String): Task = new Task(fn(string))
}
val task = "dalong" in {
case item => s" demo app ${item}"
}
task.invoke()
}
說明
通過以上程式碼我們可以將一個字串轉為一個Task 類,可以用來開發自己的dsl 模型,當然scala 3 的寫法已經簡化了現在的開發模式
以下提供了一些參考資料
參考資料
https://docs.scala-lang.org/tour/implicit-conversions.html
https://docs.scala-lang.org/tour/implicit-parameters.html
https://kubuszok.com/compiled/implicits-type-classes-and-extension-methods/
https://kubuszok.com/2018/implicits-type-classes-and-extension-methods-part-1/
https://kubuszok.com/2018/implicits-type-classes-and-extension-methods-part-2/
https://kubuszok.com/2018/implicits-type-classes-and-extension-methods-part-3/
https://kubuszok.com/2018/implicits-type-classes-and-extension-methods-part-4/
https://blog.rockthejvm.com/scala-3-extension-methods/