Android 在Koin中DSL有什么用途?

Android 在Koin中DSL有什么用途?,android,kotlin,dependency-injection,dagger-2,koin,Android,Kotlin,Dependency Injection,Dagger 2,Koin,在dagger 2中,我们在编译时生成代码。 根据作者的说法,Koin不进行任何代码生成,是一个“DSL,一个轻量级容器和一个实用API” ,, 在我看来,DSL可以生成代码,或者在运行时进行解释 来自Martins的文章: DSL可以通过解释或代码生成来实现。解释(读取DSL脚本并在运行时执行)通常是最简单的,但代码生成有时是必不可少的。通常生成的代码本身就是一种高级语言,如Java或C 但如果Koin不生成任何代码,那么Koin是否在运行时解释? 这是否意味着Koin附带了某种解析器?正如我

在dagger 2中,我们在编译时生成代码。 根据作者的说法,Koin不进行任何代码生成,是一个“DSL,一个轻量级容器和一个实用API”

,, 在我看来,DSL可以生成代码,或者在运行时进行解释

来自Martins的文章:

DSL可以通过解释或代码生成来实现。解释(读取DSL脚本并在运行时执行)通常是最简单的,但代码生成有时是必不可少的。通常生成的代码本身就是一种高级语言,如Java或C

但如果Koin不生成任何代码,那么Koin是否在运行时解释? 这是否意味着Koin附带了某种解析器?正如我所看到的,没有解析器,那么这是否意味着Kotlin本身就是解析器

谢谢

有内部和外部DSL。引述:

DSL有两种主要形式:外部和内部。外部DSL是一种独立于主机通用语言进行解析的语言:好的例子包括正则表达式和CSS。在Unix社区中,外部DSL具有很强的传统。内部DSL是主机通用语言中的一种特殊形式的API,通常称为流畅接口。模拟库(如JMock)定义测试期望的方式就是很好的例子,RubyonRails使用的许多机制也是这样。内部DSL也有着悠久的使用传统,特别是在Lisp社区中

外部DSL(有时,并非总是)涉及代码生成;Koin是一个内部DSL,它没有

继Martin Fowler的博客之后,他说DSL可以转换为代码(代码生成)。也可以在运行时对其进行解释

这是外部DSL的两个选项

如果我没弄错的话,这意味着Koin DSL就是Kotlin

以不同的方式编写,在运行时进行解释


不,只是Kotlin,用Kotlin编译器编译的。内部DSL和库之间没有重大区别;如果它使您的代码足够可读,则可以将其视为DSL。

Koin中的DSL使使用Kotlin编写代码更容易。@Froyo抱歉,但这对我帮助不大。你能详细说明一下吗?继Martin Fowler的博客之后,他说DSL可以转换为代码(代码生成)。也可以在运行时对其进行解释。如果我没弄错的话,这意味着Koin DSL只是以不同的方式编写的Kotlin,在运行时进行解释。这也意味着Koin附带了某种解析器。我说得对吗?