- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在寻找关于 artoo.io 顶部发生的事情的解释。机器人。这个例子的顶部有一个使用键盘驱动程序的声明:
require 'artoo'
connection :keyboard, adaptor: :keyboard
device :keyboard, driver: :keyboard, connection: :keyboard
似乎显示了一些速记/替代语法,我很想知道该速记的解释。我理解另一种哈希语法::adapter => :keyboard
。
上面最后两行代码是怎么回事?什么是连接
?正在初始化的是 artoo
中的类吗?为什么没有 new
? :keyboard
从哪里来?如果有更明确地表示关系的替代语法,您能否也展示一下?
最佳答案
这是一个很好的问题。它可能是重复的,但我找不到,对于刚接触 Ruby 的聪明程序员来说,这是一种棘手的事情。
首先,针对您的问题:什么是connection
?
这是一个方法调用。在某些情况下,很难区分什么是方法,什么是变量,因为这仅取决于它们是如何定义的。但在这种情况下很清楚,因为 connection
后面有参数。在 ruby 中,可以这样调用一个方法:
foo
在那种情况下,它是一个不带参数的方法。或者它可以看起来像这样:
foo 1, 2, 3
这是一个带有三个参数的方法。或者它可以看起来像这样:
foo(1, 2, 3)
这是相同的方法,但语法略有不同(使用 c、C++、Java、Javascript、C# 等类似 c 语言的人更熟悉这种语法)
因此,当您看到参数列在一个裸词之后,中间没有运算符时,这就是一个确定的信号,这是一个方法调用。
现在完全分解您的代码。
require 'artoo'
从技术上讲,这是一个方法调用。您正在调用 require
方法并传递文字字符串 'artoo'
的单个参数。您可能知道,require
将外部 ruby 文件加载到当前文件中。
connection :keyboard, adaptor: :keyboard
这是一个带有一些 syntactic sugar 的方法调用:
您马上就知道 connection
是一个方法调用,因为它后面有参数(即 connection
和后面的内容之间没有运算符)。但是什么参数?
:keyboard
: 是一个 Symbol , ruby 相当于 intern'd string .
适配器::keyboard
是 Hash .
Ruby 有两种主要的哈希语法:
{key => value}
其中 key
和 value
是任何对象,或者:
{key: value}
其中 key
是纯文字符号,value
是任何对象。此外,为了保持代码整洁,当您将哈希作为 last 参数传递给方法时,您可以省略 {
和 }
,因为这是明确的。它最终给你一个干净的“命名参数”风格的方法调用:
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})
它看起来更好(一旦你习惯了)。
关于ruby - Ruby 中的速记,Artoo.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24018726/
我正在寻找关于 artoo.io 顶部发生的事情的解释。机器人。这个例子的顶部有一个使用键盘驱动程序的声明: require 'artoo' connection :keyboard, adaptor
我好像不能用Artoo.js与 Puppeteer . 我尝试通过 npm install artoo-js 使用它,但没有成功。 我还尝试使用 Puppeteer 命令 page.injectFil
我是一名优秀的程序员,十分优秀!