[ruby] 루비에서 클래스와 클라스의 차이점은 무엇입니까?

Class와 Klass의 차이점은 무엇입니까?



답변

class새 클래스를 정의하는 데 사용되는 키워드입니다. 예약 된 키워드이므로 변수 이름으로 사용할 수 없습니다. Ruby의 키워드를 변수 이름으로 사용할 수 없으므로 def또는 module또는 if또는 end등 이라는 이름의 변수를 가질 수 class없습니다. 다르지 않습니다.

예를 들어 다음을 고려하십시오.

def show_methods(class)
  puts Object.const_get(class).methods.inspect
end
show_methods "Kernel"

이를 실행하려고 class하면 변수 이름으로 사용할 수 없기 때문에 오류가 발생 합니다.

test.rb:1: syntax error, unexpected kCLASS, expecting ')'
    def show_methods(class)
                          ^
test.rb:2: syntax error, unexpected ')'
      puts Object.const_get(class).methods.inspect

이 문제를 해결하기 위해 klass대신 식별자 를 사용합니다 . 특별하지는 않지만 일반적으로 클래스 또는 클래스 이름을 다룰 때 변수 이름으로 사용됩니다. 소리 나는대로 동일하지만 예약 된 키워드가 아니기 때문에 Ruby는 문제가 없습니다.

def show_methods(klass)
  puts Object.const_get(klass).methods.inspect
end

show_methods "Kernel"

예상대로 출력은 다음과 같습니다.

["method", "inspect", "name", "public_class_method", "chop!"...

거기에서 (예약되지 않은) 변수 이름을 사용할 수 있지만 커뮤니티는 klass. 특별한 마법이 없습니다. 단지 “여기서 ‘class’라는 이름을 사용하고 싶었지만 예약어라서 사용할 수 없습니다.”라는 뜻입니다.

참고로, 몇 번 잘못 입력 했으므로 Ruby에서는 대소 문자가 중요하다는 점에 주목할 가치가 있습니다. 대문자로 시작하는 토큰은 상수입니다. 곡괭이를 통해 :

상수 이름은 대문자와 이름 문자로 시작합니다. 클래스 이름과 모듈 이름은 상수이며 상수 명명 규칙을 따릅니다. 관례 적으로 상수 변수는 일반적으로 대문자와 밑줄을 사용하여 철자를 사용합니다.

따라서 올바른 철자는 classand klass가 아니라 Classand Klass입니다. 후자는 상수, 그리고 둘 것 ClassKlass유효한 상수 이름입니다,하지만 난 명확성을 위해 그들을 사용에 대해 추천 할 것입니다.


답변

klassRails (또는 ActiveRecord) 메서드 이기도합니다 . 연관 클래스를 가져 오는 데 사용됩니다.

링크 된 내용에 명시된대로 :

class Author < ActiveRecord::Base
  has_many :books
end

Author.reflect_on_association(:books).klass
# => Book


답변

klassclazzclasz은 예약어를 돌아 다니는 데 사용되는 창의적인 맞춤법 오류 class입니다.

그것은 사용하기 위해 눈에 거슬리는 훨씬 적은 것 class1또는 cl또는 classX의도적으로 맞춤법보다는 또는 무언가를.


답변

하나는 클래스의 이름이고 다른 하나는 기본적으로 정의되지 않은 상수입니다. 그리고 당신이 볼 가능성이 높아 쌍을 위해, class그리고 klass후자는 단지 식별자 (문자 다른 문자열처럼) 동안, 전자는 클래스를 정의하는 키워드입니다. “class”라는 단어를 쓰고 싶을 때 사용되지만 예약어이기 때문에 사용할 수 없습니다.


답변