我正在寻找关于artoo.io机器人顶部发生的事情的解释.使用键盘驱动程序在此示例的顶部有一个声明:
require 'artoo' connection :keyboard, adaptor: :keyboard device :keyboard, driver: :keyboard, connection: :keyboard
似乎显示了一些速记/替代语法,我喜欢这种简写的解释.我理解替代哈希语法::adapter => :keyboard
.
上面最后两行代码中发生了什么?什么是connection
?它是一个artoo
正在初始化的类吗?为什么没有new
?哪里:keyboard
来的?如果有更明确地表示关系的替代语法,您是否也可以显示它?
这是一个很好的问题.它可能是重复的,但是我找不到一个,对于不熟悉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}
在哪里key
和value
是任何对象,或:
{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})
它看起来更好(一旦你习惯它).