add — 경로 조각 붙이기와 BagHash 값 더하기

add — 경로 조각 붙이기와 BagHash 값 더하기

add라는 이름은 꽤 흔해서, IO::PathBagHash 두 곳에서 각각 다른 일을 해요. 이 페이지에서는 두 variant를 함께 정리해요. 하나는 파일 경로에 조각을 이어 붙이는 일이고, 다른 하나는 집합에 항목의 가중치를 더하는 일이에요.

출처: Raku 공식 문서 — add

본문

In IO::Path — 경로에 조각 이어 붙이기

method add(IO::Path:D: Str() $what --> IO::Path:D)

호출한 invocant(여기서는 IO::Path)에 경로 조각을 이어 붙이고, 결과 IO::Path를 돌려줘요. 파일로 끝나는 경로에 ../를 붙인 경우라면, 결과 경로가 다른 IO::Path 메서드(dir이나 open 같은)로 접근 가능하려면 resolve를 호출해야 할 수 있어요. 비슷한 용도의 siblingparent도 함께 보면 좋아요.

"foo/bar".IO.mkdir;
"foo/bar".IO.add("meow")    .resolve.relative.say; # OUTPUT: «foo/bar/meow␤»
"foo/bar".IO.add("/meow")   .resolve.relative.say; # OUTPUT: «foo/bar/meow␤»
"foo/bar".IO.add("meow.txt").resolve.relative.say; # OUTPUT: «foo/bar/meow.txt␤»
"foo/bar".IO.add("../meow") .resolve.relative.say; # OUTPUT: «foo/meow␤»
"foo/bar".IO.add("../../")  .resolve.relative.say; # OUTPUT: «.␤»

Rakudo 2021.07 릴리스부터는 여러 조각을 한 번에 지정할 수도 있어요.

method add(IO::Path:D: *@parts --> IO::Path:D)
"foo".IO.add(<bar baz>).resolve.relative.say;      # OUTPUT: «foo/bar/baz␤»

In BagHash — 항목 가중치 올리기

method add(BagHash: \to-add, *%_ --> Nil)

to-add가 단일 항목이면, add는 그 항목을 BagHash에 넣어요. 이미 들어 있다면 그 항목의 가중치(weight)를 1 올려요. to-addList, Array, Seq처럼 Iterator 역할을 하는 타입이라면, 각 요소를 SetHash에 넣거나 각 요소의 가중치를 1씩 올려요.

참고: 2020.02 릴리스에서 추가됐어요.