문제
상단에서 무슨 일이 일어나고 있는지에 대한 설명을 찾고 있습니다. 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, C++, Java, Javascript, C# 등과 같은 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
모든 객체입니다.또한 코드를 깨끗하게 유지하기 위해 해시를 마지막 매개변수를 메서드에 추가하려면 {
그리고 }
그것은 분명하기 때문이다.결국에는 "이름이 지정된 매개변수" 스타일의 깔끔한 메소드 호출이 제공됩니다.
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})
(익숙해지면) 더 좋아 보입니다.
다른 팁
예제에서 connection
및 device
는 메소드입니다.adapter: :keyboard
및 driver: :keyboard
및 :connection: :keyboard
비트는 해시로 전달되는 매개 변수입니다.연결 () 및 장치 ()로 전달 된 첫 번째 매개 변수는 해시에 전달되지 않습니다.
동일한 코드를 다음과 같이 다시 작성할 수 있습니다.
connection :keyboard, { adaptor => :keyboard }
device :keyboard, { driver => :keyboard, connection => :keyboard }
.