草庐IT

kotlin - 如何在 kotlin DSL 构建器中创建所需的字段

在Kotlin中,在创建自定义DSL时,在编译时强制填充构建器扩展函数中的必填字段的最佳方法是什么。例如:person{name="JohnDoe"//thisfieldneedstobesetalways,orcompileerrorage=25}强制它的一种方法是在函数参数而不是扩展函数的主体中设置值。person(name="JohnDoe"){age=25}但是,如果有更多必填字段,这会使它更难读。还有其他方法吗? 最佳答案 Newtypeinference使您能够创建一个空安全的编译时检查构建器:dataclassPers

kotlin - 如何在 kotlin DSL 构建器中创建所需的字段

在Kotlin中,在创建自定义DSL时,在编译时强制填充构建器扩展函数中的必填字段的最佳方法是什么。例如:person{name="JohnDoe"//thisfieldneedstobesetalways,orcompileerrorage=25}强制它的一种方法是在函数参数而不是扩展函数的主体中设置值。person(name="JohnDoe"){age=25}但是,如果有更多必填字段,这会使它更难读。还有其他方法吗? 最佳答案 Newtypeinference使您能够创建一个空安全的编译时检查构建器:dataclassPers

scala - 如何让 Kotlin 的类型安全构建器在 Scala 中工作?

Kotlin有很棒的typesafebuilders这使得创建这样的dsl成为可能html{head{title("Thetitle")body{}//compileerror}body{}//fine}很棒的是你不能把标签放在无效的地方,比如body里面的头,自动完成也能正常工作。如果这可以在Scala中实现,我很感兴趣。如何获得? 最佳答案 如果你对构建html感兴趣,那么这里有一个库scalatags使用类似的概念。实现这种构建器不需要任何特定的语言结构。这是一个例子:objectHtmlBuilderextendsApp{i

scala - 如何让 Kotlin 的类型安全构建器在 Scala 中工作?

Kotlin有很棒的typesafebuilders这使得创建这样的dsl成为可能html{head{title("Thetitle")body{}//compileerror}body{}//fine}很棒的是你不能把标签放在无效的地方,比如body里面的头,自动完成也能正常工作。如果这可以在Scala中实现,我很感兴趣。如何获得? 最佳答案 如果你对构建html感兴趣,那么这里有一个库scalatags使用类似的概念。实现这种构建器不需要任何特定的语言结构。这是一个例子:objectHtmlBuilderextendsApp{i

spring - 如何在 Spring Boot 和 Spring WebFlux 中使用 "Functional bean definition Kotlin DSL"?

在https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt注释显示了如何通过新的“FunctionalbeandefinitionKotlinDSL”来定义SpringBeans。我还找到了https://github.com/sdeleuze/spring-kotlin-functional.但是,此示例仅使用plainSpring而不是Sp

spring - 如何在 Spring Boot 和 Spring WebFlux 中使用 "Functional bean definition Kotlin DSL"?

在https://github.com/spring-projects/spring-framework/blob/master/spring-context/src/main/kotlin/org/springframework/context/support/BeanDefinitionDsl.kt注释显示了如何通过新的“FunctionalbeandefinitionKotlinDSL”来定义SpringBeans。我还找到了https://github.com/sdeleuze/spring-kotlin-functional.但是,此示例仅使用plainSpring而不是Sp

kotlin - 如何将自定义 View 组添加到 Anko DSL?

Ankodocs告诉我们如何向DSL添加自定义View。但是如果我的自定义View是View组,就会出现问题。classMyFrameLayout(context:Context):FrameLayout(context)funViewManager.myFrameLayout(init:MyFrameLayout.()->Unit={})=ankoView({MyFrameLayout(it)},init)classMyUI:AnkoComponent{overridefuncreateView(ui:AnkoContext)=with(ui){myFrameLayout{textV

kotlin - 如何将自定义 View 组添加到 Anko DSL?

Ankodocs告诉我们如何向DSL添加自定义View。但是如果我的自定义View是View组,就会出现问题。classMyFrameLayout(context:Context):FrameLayout(context)funViewManager.myFrameLayout(init:MyFrameLayout.()->Unit={})=ankoView({MyFrameLayout(it)},init)classMyUI:AnkoComponent{overridefuncreateView(ui:AnkoContext)=with(ui){myFrameLayout{textV

Kotlin 类型的安全构建器 DSL,最外层功能的安全性

我将使用officialexample来自为某些HTML创建实现DSL的文档。从Kotlin1.1开始,@DslMarker注释允许我们限制类中函数的范围,就像示例中的@HtmlTagMarker注释一样。当我们尝试编写这样的结构不正确的代码时,这会给我们一个错误:html{body{body{//thisinanerror,asit'safunctioncallontheoutsideHtmlelement}}}但是,这并不妨碍嵌套最外层的函数,它是DSL的入口点。例如,以现在的示例为例,可以毫无问题地写下来:html{html{}}在这方面有什么方法可以让DSL更安全?

Kotlin 类型的安全构建器 DSL,最外层功能的安全性

我将使用officialexample来自为某些HTML创建实现DSL的文档。从Kotlin1.1开始,@DslMarker注释允许我们限制类中函数的范围,就像示例中的@HtmlTagMarker注释一样。当我们尝试编写这样的结构不正确的代码时,这会给我们一个错误:html{body{body{//thisinanerror,asit'safunctioncallontheoutsideHtmlelement}}}但是,这并不妨碍嵌套最外层的函数,它是DSL的入口点。例如,以现在的示例为例,可以毫无问题地写下来:html{html{}}在这方面有什么方法可以让DSL更安全?