Ruby中的简写,Artoo.io

 独艺无二的爱 发布于 2023-01-11 20:01

我正在寻找关于artoo.io机器人顶部发生的事情的解释.使用键盘驱动程序在此示例的顶部有一个声明:

require 'artoo'

connection :keyboard, adaptor: :keyboard
device :keyboard, driver: :keyboard, connection: :keyboard

似乎显示了一些速记/替代语法,我喜欢这种简写的解释.我理解替代哈希语法::adapter => :keyboard.

上面最后两行代码中发生了什么?什么是connection?它是一个artoo正在初始化的类吗?为什么没有new?哪里:keyboard来的?如果有更明确地表示关系的替代语法,您是否也可以显示它?

1 个回答
  • 这是一个很好的问题.它可能是重复的,但是我找不到一个,对于不熟悉Ruby的聪明程序员来说,这是一件非常棘手的事情.

    首先,问题是:什么是connection

    这是一个方法调用.在某些情况下,很难说出什么是方法,什么是变量,因为它只取决于它们的定义方式.但在这种情况下很明显因为connection它后面有参数.在ruby中,可以像这样调用一个方法:

    foo
    

    在这种情况下,它是一种不带参数的方法.或者它看起来像这样:

    foo 1, 2, 3
    

    这是一个有三个参数的方法.或者它看起来像这样:

    foo(1, 2, 3)
    

    这是相同的方法,但语法略有不同(这对于人们在c-mimicing语言中的经验比较熟悉,如c,C++,Java,Javascript,C#等......)

    因此,当您看到在单词之后列出的参数之间没有运算符时,它肯定表示它是方法调用.

    现在完全分解您的代码.

    require 'artoo'
    

    这在技术上是一种方法调用.您正在调用该require方法并传递文字字符串的单个参数'artoo'.您可能知道,require将外部ruby文件加载到当前文件中.

    connection :keyboard, adaptor: :keyboard
    

    这是一个带有一些语法糖的方法调用:

    你知道这connection是一个方法调用,因为它后面有参数(即之间没有运算符connection和之后的运算符).但是什么参数?

    :keyboard:是一个符号,它是ruby相当于一个实习字符串.

    adaptor: :keyboard是一个哈希.

    Ruby有两个主要的哈希语法:

    {key => value}
    

    在哪里keyvalue是任何对象,或:

    {key: value}
    

    哪个key是纯文字符号并且value是任何对象.另外,为了保持代码清洁,当您将Hash作为方法的最后一个参数传递时,您可以不使用它{,}因为它是明确的.它最终给你一个干净的"命名参数"样式方法调用:

    do_something_to my_person, kindness: 10, aggressiveness: 2
    

    在你的代码中:

    connection :keyboard, adaptor: :keyboard
    

    你有替换的哈希语法(符号键){}左关闭.整条线100%相当于:

    connection(:keyboard, {:adaptor => :keyboard})
    

    你的最后一行:

    device :keyboard, driver: :keyboard, connection: :keyboard
    

    是一回事.相当于:

    device(:keyboard, {:driver => :keyboard, :connection => :keyboard})
    

    它看起来更好(一旦你习惯它).

    2023-01-11 20:03 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有