2017-04-20 12 views
0

클래스 상수를 사용하여 특성 판독기를 할당하려고 할 때 모호한 표시 연산자 오류가 발생합니다.상수 및 attr_reader with rubocop이있는 Splat (*) 연산자의 오류

그러나 나는 여전히 rubocop 위반/구문 오류로 이어지는 몇 가지 해결 방법을 시도했습니다. 여기에 방법의 몇 가지 시도하다 : (X1에 대한 문서의 부족을 제외하고)이 잘 작동하고 Rubocop 불평 아무것도 찾을 수없는

Class X1 
    CONST = [:a, :b, :c] 
    attr_reader(*CONST) 
end 


Class X1 
    CONST = [:a, :b, :c] 
    attr_reader(*(CONST)) 
end 
+0

'Class' 대신'class' – Ilya

+0

'attr_reader (* CONST)'는 Rubocop을 불쾌하게하지 않습니다. –

답변

2

:

class X1 
    CONST = %i[a b c].freeze 
    attr_reader(*CONST) 
end 

x = X1.new 
p x.a 
# nil 
p x.b 
# nil 
p x.c 
# nil 
+0

@Ilya : 감사합니다. 일부 지침은 나에게 꽤 자의적 인 것처럼 보입니다. –

+0

네,'% i()'에서'% i []'로의 변경은 어디에도 없습니다. 따라서이 변경은 아무 것도 가져 오지 않고 git diff/blame history를 망칠 것이기 때문에 이것을 비활성화했습니다. –

+0

@AndreyDeineko : [루비 스타일 지침] (https://github.com/bbsosov/ruby-style-guide)에서 : "[] 배열 리터럴 (% w, % i, % W, % I) 그것은 표준 배열 리터럴과 정렬됩니다. " 네 말이 맞아, 레포를 수정할만한 가치가없는 것 같아. –

1

나는 구조가 동의 같은 :

attr_reader *FOO 
attr_reader의 반환이 meaningles 것 곱셈을 수행하여 무효 컨텍스트에서 발생하고 있기 때문에

이 모호함으로 간주되어서는 안된다 실수 일 가능성이 있습니다.

또한 관용적 인 Ruby는 괄호없이 매크로 메서드를 호출해야하며 에 괄호를 추가해야하는 경우이이 규칙과 충돌합니다.

우리는 이것을 알고 있으며 RuboCop 레포에는 open issue이 있습니다. 그러나이 경찰은 기본적으로 parser 보석의 진단을 둘러싼 포장지이기 때문에 조금 특별합니다. 경찰을 다시 구현하지 않고는이 예외를 만들 수있는 쉬운 방법이 없을 수도 있습니다. 플랫 인수 매크로 방법에 대한

  • 괄호를 사용 : 지금은


    , 당신은이 문제를 얻을 수있는 옵션이 있습니다.

  • rubocop:disable 지시어를 사용하여이 범죄의 각 사례에 대한 경찰을 인라인 해제하십시오. (이는 범죄 횟수에 따라 가능할 수도 있고 그렇지 않을 수도 있습니다.)
  • 문제가 해결 될 때까지이 관리자를 모두 비활성화하십시오.