2012-10-24 1 views
4

레일스에서 ​​일관성없는 명명 규칙이 혼동을 일으키고 있습니다. 문법이 모든 곳에서 쓰이는 것처럼 보입니다. 다음은 몇 가지 예입니다.변수는 Symbol, Method입니다. 왜 콜론을 사용합니까? 그렇지 않습니다.

왜 아래에 이전에 쉼표가 있습니까? 그리고 키워드 default 앞에 콜론이없는 이유는 무엇입니까? 이 default 키워드, 메소드 또는 변수 인 기호는 무엇입니까?

가 왜 :age (콜론) age입니다 : 또 다른 예 그 일이? 여기

add_column :zombies, :rotting, :boolean, default: false 

란 무엇입니까? 왜 전에 make_rotting은 ":"이라고 불렀습니까?

class Zombie < ActiveRecord::Base 
     before_save :make_rotting 

    def make_rotting 
     if age > 20 
     self.rotting = true 
     end 
    end 
end 
+0

아래의 답변에 추가하려면 : default/default는 생성되는 동안 전달되지 않는 경우 열에 전달되는 기본값입니다. –

+3

Rails를 이해하기 전에 [Ruby 프로그래밍] (http://www.ruby-doc.org/docs/ProgrammingRuby/) 책을 읽어야 할 시간이 필요합니다. 귀하의 질문은 모든 언어의 기본 사항이며, Ruby 튜토리얼에서 잘 설명되어 있습니다. "[프로그래밍 루비] (http://www.ruby-doc.org/docs/ProgrammingRuby/)"외에도 "[왜 루비에 대한 (분명한) 가이드] (http://mislav.uniqpath.com)를 확인하십시오./신랄한 가이드 /) ". –

답변

8

루비는 자바와 PHP 사람들을위한 어려울 수 있습니다 :

add_column :zombies, :rotting, :boolean, default: false 

는 다음과 같이 다시 작성할 수 있습니다. :)

루비에서는 모든 것이 그럴 것처럼 보입니다. 예를 들면 다음과 같습니다.

before_save :make_rotting 

이것은 메소드 호출입니다. 그러나 호출되는 방법은 make_rotting이 아닙니다. before_save (:make_rotting이 매개 변수 임)입니다. 이것은 ActiveRecord의 소위 후크입니다. before_save은 메서드 이름을 매개 변수로 사용하고 순간이 올 때 동적으로 메서드 이름을 호출합니다. 여기

if age > 20 

age는 메소드 호출이 아닌 심볼이다. 이 같이 쓸 수있다 :

if age() > 20 

그러나 괄호는 선택 사항입니다. 마지막으로 :

add_column :zombies, :rotting, :boolean, default: false 

이 메서드는 매개 변수 4 개를 사용하며 마지막 매개 변수는 해시입니다. 해시는 새로운 Ruby 1.9 구문을 사용합니다.이전에합니다 (바로 이곳에서 콜론, 그리고 모두와 함께)과 같이 기록 될 것입니다 :

add_column :zombies, :rotting, :boolean, :default => false 

당신은 대신 스택 오버플로 게시물에서 지식의 조각을 긁어의 루비 프로그래밍에 대한 좋은 책을 읽어야한다. :)

+0

그리고 괄호는 선택 사항이지만 많은 노약자와 많은 언어 전쟁을 경험 한 베테랑은 필요 여부와 관계없이 자동으로 괄호를 추가하는 경향이 있습니다. 런타임시 모호함을 피하기 위해 수행되는 코드 유지 관리 작업입니다. –

+0

+1 "stackoverflow 게시물에서 지식 조각을 긁는 대신 루비 프로그래밍에 관한 좋은 책을 읽어야합니다." –

+0

@theTinMan : 나이든 20 세 이상이라면 나이가 들었다면 20 세가 더 좋다고 나에게 이야기 해 주시겠습니까? :) –

3

세 가지 주요 것들 : 루비

  1. 방법은 해당 인수 주위에 괄호를 필요로하지 않는다. before_saveadd_column은 방법이므로 before_save에 대한 인수는 :make_rotting입니다.
  2. :으로 시작하는 것은 모두 기호입니다. 기호는 문자열과 같지만 코드에서 동일한 기호를 몇 번이나 사용하더라도 메모리에 한 번만 할당됩니다. 그것들은 많은 것들을 위해 사용되는데, 매우 자주 해시 키로 사용됩니다.
  3. 마지막 인수로 해시를 사용하는 루비 메소드는 해시 주변에 {}이 필요하지 않습니다.

그래서이 :

add_column(:zombies, :rotting, :boolean, {default: false}) 
+0

"기호는 전달할 수 있지만 변경할 수없는 문자열입니다." 아니, 그들은 문자열이 아니지만 비슷한 것처럼 보이며 비슷한 방식으로 자주 사용됩니다. 기호는 훌륭하고 Ruby 코드에서 많은 장점을 가지고 있으므로 두려워하지 마십시오. –

+0

새 수정 사항이 좀 더 명확해질 수 있습니다. – spike

관련 문제