6.4.3 변수 캡처(Variable capture)
6.4.3 변수 캡처(Variable capture)
하위 패턴의 어떤 값이든 식별자에 매칭해 잡을 수 있어요:
var myTree = Node(Leaf("foo"), Node(Leaf("bar"), Leaf("foobar")));
var name = switch (myTree) {
case Leaf(s): s;
case Node(Leaf(s), _): s;
case _: "none";
}
trace(name); // foo
이것은 다음 중 하나를 반환합니다:
myTree가Leaf이면 그 이름이 반환된다.myTree가 왼쪽 하위 트리가Leaf인Node이면 그 이름이 반환된다(여기서 해당돼"foo"반환).- 그 외에는
"none"이 반환된다.
=를 사용해 더 매칭되는 값을 캡처할 수도 있어요:
var myTree = Node(Leaf("foo"), Node(Leaf("bar"), Leaf("foobar")));
var node = switch (myTree) {
case Node(leafNode = Leaf("foo"), _): leafNode;
case x: x;
}
trace(node); // Leaf(foo)
여기서 입력이 Leaf("foo")와 일치하면 leafNode가 Leaf("foo")에 바인딩됩니다. 다른 모든 경우 myTree 자체가 반환돼요: case x는 무엇이든 일치한다는 점에서 case _와 유사하지만, x 같은 식별자 이름은 일치 값을 그 변수에 바인딩하기도 합니다.
Haxe 4.0.0 이후 — 컴파일러가 "catch-all" 변수의 이름이 enum 생성자와 매우 유사하다고 감지하면 잠재적 오타를 경고합니다. 변수 식별자 앞에
var를 붙이면 이를 피할 수 있어요:
var myTree = Node(Leaf("foo"), Node(Leaf("bar"), Leaf("foobar")));
switch (myTree) {
case Leaf(_):
// ...
case var node:
// without var above the compiler would warn about a potential typo
// node contains the entire matched tree
}
어떤 캡처 변수든, 심지어 하위 패턴 안에서도 var로 접두할 수 있어요.
출처: Variable capture
본문
식별자 캡처
case Leaf(s):처럼 하위 패턴 값을 식별자에 캡처할 수 있어요. case x:는 무엇이든 일치시키고 그 값을 x에 바인딩합니다.
= 로 캡처
leafNode = Leaf("foo")처럼 =를 쓰면 더 깊이 매칭하면서 값을 캡처할 수 있어요.
var 접두
Haxe 4에서 catch-all 캡처 이름이 enum 생성자처럼 보이면 오타 경고가 나올 수 있어요. case var node:처럼 var로 접두하면 피할 수 있습니다.