로컬 범위 유지데이터를 시각화하기위한 프레임 워크를 만들려고합니다. 템플릿으로 전달 된 데이터에 작용할 수있는 몇 가지 버튼이있는 템플릿을 만듭니다.
그러나이 함수를 호출하는 함수가있는 단추를 만드는 부분이 코드의 단추 위치를 기반으로 생각한 것과 다른 범위에서 발생하는 범위에 문제가 있습니다.
아래에 최소한의 작업 예제를 제공했습니다. 각 단추를 클릭하면 결과 함수 호출이 원래 정의 범위 내에서 일어날 것으로 예상됩니다.
이것을 달성 할 수있는 방법이 있습니까?
감사!
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << Add ( "Added", msg )
);
tab_function = Function({msg}, {Default Local},
Tab Box (
"one",
tb1 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb1, msg))
);,
"two",
tb2 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb2, msg))
);,
"three",
tb3 = Tab Box();
V List Box(
b = Button Box ( "Add", insert_text(tb3, msg))
);
)
);
New Window(
"Test Window",
tab_function("hi");
)제목 : Re : 로컬 범위 유지insert_text 함수가 tab, tb 및 msg, msg를 참조하고 있음을 이전 스크립트에서 확인하십시오. << Set 함수는 참조 (this)를 버튼에 전달하고 부모 인 VListBox 또는 부모 parent 인 parent를 참조 할 수 있습니다.
우선, 나는 탭을 만드는 함수를 사용하지 않을 것이다. 탭 페이지 상자를 사용하도록 스크립트를 수정하고 변수를 만들었습니다. 함수를 사용하고 있기 때문에 모든 변수를 지정했지만 msg가 로컬 인 경우 tab_function을 실행하면 변수 참조가 알 수 없습니다. {Default Local}에 댓글을 달았습니다. 오류를 보려면 주석 처리를 제거하십시오.
insert_text 함수를 수정하여 스크립트가 어떤 탭 버튼을 눌렀는지 알고 그 탭 페이지에 대한 정보를 얻을 수 있음을 보여줍니다. 각 탭의 버튼을 테스트하십시오.
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << select;
str = tb << get title;
str = "I am on tab " || str || " with message " || msg;
Caption(str); wait(2); Caption(remove);
tb << Append (TextBox( msg ));
tb << deselect;
);
tab_function = Function({msglist}, //{Default Local},
Eval(Eval Expr(
mytb= Tab Box (
tb1=Tab Page Box( "one",
V List Box(
b = Button Box ( "Add", insert_text(tb1, expr(msglist[1])) )
)
),
tb2 =Tab Page Box( "two",
V List Box(
b = Button Box ( "Add", insert_text(tb2, expr(msglist[2])) )
)
),
tb3=Tab Page Box("three",
V List Box(
b = Button Box ( "Add", insert_text(tb3, expr(msglist[3])) )
)
)
)
) )
);
New Window(
"Test Window",
tab_function({"hi","stay awhile", "goodbye"} );
);
//this command with throw an error with {Default Local}...once the tab_function runs tb1, etc are unknown
show( mytb << class name, tb2<<GET title=""></GET>제목 : Re : 로컬 범위 유지도움 감사합니다! 그러나, 내가 정확히 무엇을 찾고 있어요 - "insert_text"함수 내에서 변수의 참조를 전달하여 "insert_text"함수 내에서 "tab_function"로컬 변수를 참조 할 수 있어야합니다.
제목 : Re : 로컬 범위 유지나는 당신이 무엇을하려고하는지 잘 모릅니다. 그러나 이것은 나의 가장 좋은 추측이다. 나는 몇 가지를 수정했다.
Names Default To Here ( 1 );
insert_text = Function({tb, msg}, {Default Local},
tb << select;
Caption(msg); wait(2); Caption(remove);
tb << Sib Append (TextBox( msg ));
tb << deselect;
);
tab_function = Function({msg}, {Default Local},
Eval(Eval Expr(
Tab Box (
"one",
V List Box(
b = Button Box ( "Add",
<<SET function=""></SET>