2016-12-09 1 views
2

는 내가 속편의 문서를 읽고 있던 나는 다음과 같은 코드에 사용 된 기술에 대한 호기심을 가지고있어 :어떻게 루비에서이 결과를 얻을 수 있습니까?

class Post < Sequel::Model(:my_posts) 
    (...) 
end 

Sequel::Model(:my_posts)는 모델의 데이터베이스 테이블을 설정합니다. 나는 특히 Model(:my_posts)의 괄호에 대해 궁금합니다. 이 인터페이스가 마음에 들지만 어떻게 구현할 수 있습니까? 그것은 조금 이상합니다 ... Model은 메소드로 호출 될 수 있습니다 ...이 기술은 어느 것입니까? 누군가가 내게 모범을 줄 수 있습니까?

+0

이것은 상수'Sequel'에 의해 참조 된 객체에서'Model'이라는 이름의 메소드를 호출하고,'Symbol'' : my_posts'를 인수로 전달합니다. 이 메소드는 아마도'Class' 클래스의 인스턴스를 리턴 할 것이고, 그렇지 않으면'TypeError'를 얻을 것입니다. –

답변

4

일반적으로 ::을 모듈 또는 클래스와 함께 사용하면 ruby는 :: 이후에 상수를 찾습니다.

Example::First => as constant 
Example::First() => as method 

실행이 코드 :

module Example 
    class << self 
    def First(a) 
     puts a 
    end 
    end 

    module First 
    end 
end 

사용법 :

Example::First(1) # => prints 1 

당신이 class << self 열고 자신의 클래스 메소드가 (현재의 자기 개체에 대한 재정의 할 수 있도록하는 내부를 사용

클래스 또는 모듈 본문은 클래스 또는 모듈 자체입니다. SO에 관해서는 question/answers을 잘 읽으십시오. 필수 않으면 서 대문자 로 시작하는 이름은 루비 상수이기 때문에

그것은 좋은 방법은, 소문자 문자로 메서드 이름을 시작,이다. 이 방법 에 대한 상수 이름을 사용하는 것은 여전히 ​​가능하지만, 당신은 interpeter가 What are the restrictions for method names in Ruby?

에서 일정한

같은 이름에 대한 업 보일 것이기 때문에, 괄호없이 그것을 호출 할 수 없습니다

+0

Sequel은 'def_model' 메서드를 정의했습니다 ([here] (http://sequel.jeremyevans.net/rdoc/classes/Sequel/Model/ClassMethods.html#method-i-def_Model) 참조). 주어진 모듈 – user3033467

관련 문제