适当的DSL语法

nev*_*ame 5 ruby dsl

我试图编写自己的DSL进行文件操作,只是为了学习.

我的目标是使其易于理解且易于编码.

以下是将字符串附加到database.yml的3种方法:

1. append("windows").to("database.yml")

2. append(string: "windows").to(file: "database.yml")

3. append_string("windows").to_file("database.yml")

4. append_string "windows", to_file: "database.yml"

5. append string: "windows", to_file: "database.yml"
Run Code Online (Sandbox Code Playgroud)

我在所有这些替代方案中有点迷失.

具有DSL经验的人能给我一些指导并解释每个人的利弊吗?

每个人的阅读都是一样的,但我想知道哪一个遵循DRY的最佳实践和良好的编码标准.

编辑:我认为如果我可以指定一些可选参数,那将会很好.

append(string: "windows").to(file: "database.yml", :force => true)
Run Code Online (Sandbox Code Playgroud)

所以考虑到这一点,我想我必须使用方法调用.因为如果我使用替代4-5然后当我指定:force => true时,我不知道它是否是字符串或文件.

小智 4

对我来说,任何选择似乎都不错。

如果您(或用户)总是写入“database.yml”但附加内容不同,那么以下可能会更好。

on "database.yml" {
    append "windows"
    append "ubuntsu"
    append "Leopard" 

    remove_if "bsd"  do |..|
         ....#if condition satisfied, "bsd" will be removed
    end
    ..
}
Run Code Online (Sandbox Code Playgroud)

如果您(或用户)希望始终为不同的数据库文件附加“windows”,那么以下可能没问题。(也许是罕见的情况,,)

append "windows".to {
    to "database.yml"
    to "database2.yml"
    to "database3.xml", :force=>true
}
Run Code Online (Sandbox Code Playgroud)

无论如何,我认为更好的选择是自己使用它或询问你的用户,然后完善。