2013-08-20 3 views
0

저는 루비 개발자가 아니며 요리사 레시피를 수정하고 있습니다. 다음을 한 줄에 넣을 수 있는지 궁금합니다. 이 오류가 발생합니다, 그러나같은 줄에 콜백 넣기

directory "/var/lib/mysql", :action => "delete" 

:

directory "/var/lib/mysql" do 
    action :delete 
end 

나는이 시도

ArgumentError 
------------- 
wrong number of arguments (3 for 2) 

나뿐만 아니라 본 적이,하지만 이것은 단지 나에게 어색한 것 같다

directory "/var/lib/mysql" do action => "delete" end 

답변

1

중괄호는과 같습니다., 그리고 훨씬 더 일반적으로 한 라이너에 사용되는 중괄호도 해시를 정의하는 데 사용되기 때문에 괄호를 추가

directory("/var/lib/mysql") { action :delete } 

은 모호성을 방지하기 위해 필요합니다.

+0

이제 호출에 두 개의 arg가 있으면 어떻게됩니까? '디렉토리 "/ var/lib/mysql/data"소유자 "mysql"그룹 "mysql"end'. 이를 디렉토리 ("/ var/lib/mysql/data") {소유자 "mysql"그룹 "mysql"}'로 변환하면 컴파일 오류가 발생합니다. –

+1

당신이 "args"라고 부르는 것은 실제로는 메소드 호출입니다. 이것은 루비 코드 라인입니다. 당신은''mysql ''인자를 가진'owner' 메소드를 호출하고,''mysql'''인수를 가진'group' 메소드를 호출하고 있습니다. 세미콜론 (;)을 중간에 놓음으로써 이것들이 분리 된 줄 (그리고'owner' 메쏘드에 대한 하나의 긴 문자열이 아니라)을 표시 할 필요가 있습니다 :'{owner "mysql"; 그룹 "mysql"}'. – Grantovich

1

라는 것을 사용했다 당신은 두 가지 방법으로 할 수있는 block

directory("/var/lib/mysql") { action :delete } 

당신은 단지 세미콜론 루비에 존재하는 당신에게, 당신의 코드를 이런 식으로 넣을 수

))
directory "/var/lib/mysql" do ; action :delete ; end