DynamicModule 출력의 Parts []
질문에 부분적으로 대답했습니다. 조작되지 않은 변수를 기반으로 프로그래밍 방식으로 조작 컨트롤을 생성 할 수 있습니까? , 그것은 저를 제 자신의 질문으로 이끌었습니다.
배경:
다음 코드는 한 쌍의 동일한 Sliders를 생성합니다 . 여기서 값 1을 설정하면 다른 값이 표시됩니다.
{Slider[Dynamic[d], {0, 1, 0.01}],
Dynamic[d],
Dynamic[Plot[Sin[1 + d x], {x, -10 \[Pi], 10 \[Pi]}]]
} & /@ Range[2]
예 :
코드를으로 래핑하면 s를 독립적 DynamicModule으로 설정할 수있는 다른 기능이 제공됩니다 Slider(유용한 작업 일 수 있음).
dm = DynamicModule[{d},
{Slider[Dynamic[d], {0, 1, 0.01}],
Dynamic[d],
Dynamic[Plot[Sin[1 + d x], {x, -10 \[Pi], 10 \[Pi]}]]
}] & /@ Range[2]
{"Length", Length[dm]}
{"Dimensions", Dimensions[dm]}
TreeForm[dm]
내가 추가 한 Length, Dimensions그리고 TreeForm더 나은 코드가 실제로 생산을 이해 할 수 있습니다.
이것을 좀 더 살펴 보겠습니다.
dm[[1]]
Length[%]
참고, 나는 설정 Slider에 0.69코드를 실행 한 후.
그리고 이제 나는 Parts표현의 추출을 시도합니다 .
dm[[1, 1]]
dm[[1, 2]]
dm[[1, 3]]
이것은 약간 이상하게 보입니다. 나는 순서대로 3 Parts를 얻을 것이라고 예상했을 것입니다 dm[[1]].
Slider
Value
Plot
그래서 몇 가지 질문 :
누군가 이것을 설명 할 수 있습니까?
Part의들dm[[1]]중 하나가 기대하는 것처럼 행동하는 표시되지 않습니다.2 개의 현재 상태에 액세스하는 방법의 존재
Plot에들dm, 그리고 예를 들어Show그들을 함께?이러한 표현에
TreeForm액세스하는 방법에 대한 통찰력을 제공 합니까Part?
나는이 질문들이 현실 세계에 많이 적용되지 않는 신비한 체스 문제 와 비슷할 수 있다는 것을 알고 있지만, 대답이 이러한 구조에 대한 추가 작업 통찰력을 제공 할 수 있기를 바랍니다.
답변
1- DynamicModule처럼 사라지지 않습니다 Module. 콘텐츠의 초기 평가 후에는 비활성 상태로 유지되며 GUI 내에서 범위 지정을 관리하는 DynamicModuleBox를 생성하기 위해 출력으로 전송 될 때 사용됩니다.
dm[[1]] // InputForm
DynamicModule[
{d},
{Slider[Dynamic[d], {0, 1, 0.01}], Dynamic[d], Dynamic[Plot[Sin[1 + d*x], {x, -10*Pi, 10*Pi}]]},
DynamicModuleValues :> {}
]
이것은 dm[[1]]두 개의 인수와 하나의 옵션이 있으며 이는 길이를 얻을 수 있음을 의미합니다 3.
2- dm는 다른 표현과 마찬가지로 Table[dm, {10}]10 개의 독립된 복사본을 포함합니다. 생성 된 각 GUI는 독립적입니다. 내부에서 값에 가장 자주 액세스하려면 내부에서이를 수행해야합니다. 예 :
DynamicModule[{x}, Slider @ Dynamic[x, (notScopedX = x = # )&]
이제 Dynamic @ notScopedX다른 곳에서 사용할 수 있습니다 .
3- 물론 그렇습니다 InputForm. 트리 양식에을 사용하여 첫 번째 슬라이더에 액세스 할 수 있습니다 dm[[1, 2, 1]]. 그러나 이것은 이전 / 나중에 GUI를 생성하는 데 사용 된 사본입니다.
명확하지 않은 것이 있으면 알려주십시오.