서브 세트를 Raku로 내보낼 수 있습니까?


9

die유용한 오류 메시지에 대한 몇 가지 제약 조건과 문장을 추가하는 몇 가지 하위 집합을 정의하고 싶습니다 . 해당 하위 집합을 사용하는 모듈 맨 위에 정의하고 싶지 않고 대신 FQN (정규화 된 이름)을 사용하여 다른 모듈에 배치하고 싶습니다. 예를 들어

unit module Long::Module::Subsets;

subset PosInt
where ($_ ~~ Int || "The value must be an integer")
   && ($_ > 0    || "The value must be greater than 0")
is export
;

# other subsets ...

그러나 얻었다

===SORRY!=== Error while compiling /tmp/637321813/main.pl6
Two terms in a row ...

작동하지 않는 대신 다음과 같이 무언가를 할 수 있다고 생각했지만 그것을 피할 수 있는지 궁금합니다.

use Long::Module::Subsets;

unit Long::Module;

my constant PosInt = Long::Module::Subsets::PosInt;
my constant Byte   = Long::Module::Subsets::Byte;
# ... more subsets here

# ... some code here

my PosInt $age;

1
참고로 PosInt를 포함하는 공통 서브 세트 모듈이 있습니다 : github.com/bradclawsie/Subsets-Common
user0721090601

답변:


12

서브 세트는 실제로 내보낼 수 있습니다. 여기서 문제는 is export특성이 PosInt서브 세트 (및 내보내려는 다른 서브 세트)에 제대로 적용되지 않는다는 것입니다 . 이 특성은 새 유형이 정의 된 직후 및을 (를) 도입 한 제약 조건 바로 앞에 적용해야합니다 where. 특성을 올바르게 적용하여 :

unit module Long::Module::Subsets;

subset PosInt is export
where ($_ ~~ Int || "The value must be an integer")
   && ($_ > 0    || "The value must be greater than 0")
;

# other subsets ...

다음은 잘 작동합니다.

use Long::Module::Subsets;

unit Long::Module;

# ... some code here

my PosInt $age;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.