当前位置:  开发笔记 > 后端 > 正文

需要帮助改进Ruby DSL以控制Arduino控制饮料机(棒猴)

如何解决《需要帮助改进RubyDSL以控制Arduino控制饮料机(棒猴)》经验,为你挑选了1个好方法。

我正在用Ruby写一个DSL来控制我正在研究的Arduino项目; Bardino.这是一只酒吧猴子,可以通过软件控制饮料.Arduino通过串口接收命令告诉Arduino打开什么泵以及打开多长时间.

它目前读取配方(见下文)并将其打印出来.串行通信的代码仍然需要处理以及我在下面提到的其他一些想法.

这是我的第一个DSL,我正在使用前一个例子,所以它的边缘非常粗糙.任何批评,代码改进(有没有对Ruby DSL最佳实践或成语的任何好的参考?)或任何一般性评论.

我目前有一个草案的粗略草案,所以饮料配方看起来如下(Github链接):

desc "Simple glass of water"
recipe "water" do
  ingredients(
  "Water" => 2.ounces
  )
end

这反过来被解释,目前结果如下(Github链接):

[mwilliams@Danzig barduino-tender]$ ruby barduino-tender.rb examples/water.rb
Preparing: Simple glass of water

Ingredients:
 Water: 2 ounces

这是DSL的一个良好开端,但是,我认为它可以更好地实现.我在下面提出的一些想法:

    使用配料名称和连接的数字泵定义可用的"成分".也许使用哈希?成分= {"水"=> 1,"伏特加"=> 2}.这样,当一种成分被解释时,它可以a)通过串口发送泵号,然后是Arduino分配的盎司数b)告诉用户该成分不存在并中止所以没有分配c)如果它们发生变化,很容易有能力改变或添加新成分.

    使配方看起来更像代码,这是DSL的主要目的,可能会构建一个配方构建器?使用可用的成分提示用户饮用名称,成分涉及多少?

Github项目在这里,随意分叉并提出拉取请求,或在此发布您的代码建议和示例供其他用户查看.如果你有点好奇,使用Ruby Arduino开发框架的Arduino代码就在这里.

更新

我修改并清理了一些东西以反映Orion Edwards对食谱的建议.它现在看起来如下.

description 'Screwdriver' do 
  serve_in 'Highball Glass'
  ingredients do
    2.ounces :vodka
    5.ounces :orange_juice
  end
end

我还添加了一个哈希(键是成分和它连接的泵号的值).我认为这提供了很多进展.我现在将问题留给任何进一步的建议,但最终将选择猎户座的答案.更新的DSL代码在这里.



1> Orion Edward..:

在不查看实现细节(或您的github链接)的情况下,我会尝试编写这样的DSL:

(从这里偷窃:http://supercocktails.com/1310/Long-Island-Iced-Tea-)

describe "Long Island Iced Tea" do
  serve_in 'Highball Glass'

  ingredients do
    half.ounce.of :vodka
    half.ounce.of :tequila
    half.ounce.of :light_rum
    half.ounce.of :gin
    1.dash.of :coca_cola
    #ignoring lemon peel as how can a robot peel a lemon?
  end

  steps do
    add :vodka, :tequila, :light_rum, :gin
    stir :gently
    add :coca_cola
  end
end

希望有所帮助!

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有