2011-02-04 32 views
24

Có cách nào để tách sổ ghi chép Mathematica mở để chúng không chia sẻ bất kỳ biến nào không? Làm thế nào để làm cho nó như vậy một số biến được chia sẻ nhưng không phải tất cả?Mathematica - Tách Máy tính xách tay

Trả lời

35

Có, có. Tôi khuyên bạn nên đọc tài liệu liên quan đến ngữ cảnh Mathematica. Tóm lại, tất cả các biến thuộc về một số bối cảnh (không gian tên), và tất cả các biến có thể được truy cập thông qua tên đầy đủ của họ có dạng "ContextName`varName". Nếu bạn chỉ sử dụng "varName", Mathematica sẽ tìm kiếm các ngữ cảnh trong $ContextPath (thử đánh giá biến số $ContextPath để xem nó là gì), và sẽ sử dụng ngữ cảnh đầu tiên mà nó tìm thấy biến đó. Ngoài ra, mỗi sổ ghi chép chỉ định một ngữ cảnh (được lưu trữ trong biến $Context) trong đó tất cả các biến của nó được lưu trữ (trừ khi được sử dụng tên đầy đủ).

Theo mặc định, đối với tất cả sổ ghi chép, ngữ cảnh là "Toàn cầu". Cũng theo mặc định, $ ContextPath cho tất cả các sổ ghi chép bao gồm bối cảnh "Toàn cầu" (cũng như "Hệ thống" và một số khác). Kết quả thực là các biến được chia sẻ trên các sổ ghi chép và điều này có thể nhanh chóng trở nên khó chịu. Tuy nhiên, có một giải pháp dễ dàng. Để tạo ra một bối cảnh "riêng" cho một máy tính xách tay, đánh giá như sau:

SetOptions[EvaluationNotebook[], CellContext -> Notebook] 

máy tính xách tay này sẽ được gán một bối cảnh duy nhất (đánh giá biến $Context để xem nó là gì). Ngoài ra, bối cảnh toàn cầu sẽ bị xoá khỏi ContextPath (thử đánh giá $ContextPath trước và sau khi SetOptions[...] ở trên để xem những gì đang xảy ra.)

[Cập nhật: Như đã chỉ ra bởi rcollyer trên mới Mathematica chồng trao đổi, thiết lập này tùy chọn làm mặc định cho sổ ghi chép mới, hãy làm như sau: mở Thanh tra Tuỳ chọn (Ctrl + Shift + O), thay đổi phạm vi (trong trình đơn thả xuống ở trên cùng) từ "Lựa chọn" thành "Tùy chọn Toàn cầu"; bên trái mở rộng lựa chọn các nút di động -> Options đánh giá, và thay đổi các thiết lập để CellContext]

Bây giờ, đây là cách để tạo ra một bối cảnh chia sẻ "Máy tính xách tay.":

Begin["SharedContext`"]; 
varShared1 = "Shared string"; 
End[]; 

Ngoài ra, bạn có thể' tôi vừa gõ

SharedContext`varShared1 = "Shared string"; 

Bây giờ bạn có thể sử dụng tên đầy đủ ("SharedContext`varShared1" sẽ làm việc trong bất kỳ máy tính xách tay), hoặc bạn có thể thêm bối cảnh đến $ ContextPath:

AppendTo[$ContextPath, "SharedContext`"] 

Nếu bạn làm điều này trong tất cả sổ ghi chép, varShared1 sẽ hiển thị mà không có tên đủ điều kiện.

Để tóm tắt, ngữ cảnh hoạt động giống như nhiều đường dẫn tìm kiếm khác. Tuy nhiên, có rất nhiều sự tinh tế (ví dụ, nếu một biểu tượng đã được xác định trong một số ngữ cảnh khác, khối Bắt đầu ["SharedContext`"]/End [] có thể không hoạt động như bạn mong đợi - ngữ cảnh hiện tại của biểu tượng sẽ được sử dụng thay vì SharedContext`), vì vậy tôi khuyên bạn nên sử dụng liều thử nghiệm lành mạnh và xem xét các tài liệu.

+0

Đúng. Tốt hơn tôi nhiều. Đang xóa. –

+6

Bạn cũng có thể thiết lập điều này thông qua trình đơn Đánh giá> Trình đơn ngữ cảnh mặc định của Notebook (thay vì SetOptions.) [Tài liệu sử dụng cài đặt "Duy nhất cho mỗi nhóm ô" để không có bất kỳ xung đột nào.] –

+1

Câu hỏi tiếp theo: có anyway để làm cho Mathematica thiết lập bối cảnh của sổ ghi chép mới để được tư nhân theo mặc định, thay vì phải tạo ra một bối cảnh riêng cho mỗi sổ tay mới bằng tay? – Joe

1

Tôi không thực sự chắc chắn nếu đây là một điều khôn ngoan để làm, nhưng dù sao.

Đây là giải pháp sơ đồ cho hai Sổ tay. Nó có thể được khái quát hóa, nhưng nó không đơn giản.

  1. mở hai máy tính xách tay

  2. Trong mỗi trong số họ đi vào menu (đánh giá -> mặc định bối cảnh Notebook của -> Duy nhất Máy tính xách tay này) Với điều này, những biểu tượng không được chia sẻ nữa.

  3. Trong mỗi Máy tính xách tay nhập cái gì đó như Context[] để có được những tính xách tay Context

  4. Bây giờ trong mỗi Máy tính xách tay nhập mã sau

.

Needs["Experimental`"]; 
    SetAttributes[f, HoldFirst]; 

    f[s_, val_] := [email protected]["Notebook$$17$799580`", 
        [email protected]@s, "=", [email protected]]; 

    ValueFunction[t] = f 

Trường hợp Notebook$$17$799580 là bối cảnh của máy tính xách tay KHÁC (điều này sẽ có thể có được "tự động", nhưng đây là một bằng chứng về chỉ khái niệm.

Bây giờ khi bạn muốn chia sẻ một biểu tượng nhập

f[symbolToShare] 

Vậy là xong.

Bạn có thể chia sẻ các giá trị hai chiều, hoặc chỉ theo một hướng, đi vào f [x] duy nhất trong Máy tính xách tay y bạn muốn làm giá trị nguồn cho x. Máy tính xách tay khác sẽ nhận được giá trị cập nhật, nhưng nó sẽ không cập nhật lại.

HTH!

Sửa

Hướng tới tự động hóa:

Bạn có thể nhận được tất cả các bối cảnh mở Máy tính xách tay khác để cập nhật biểu tượng chung của bạn như:

ctxs[]:= Complement[Contexts["Notebook$$*"], 
        [email protected][{Context[]}, 
        StringCases[Contexts["Notebook$$*"], __ ~~ "Private" ~~ __]]] 

Vì vậy, bạn e sẽ trở thành một cái gì đó như thế này (không thử nghiệm)

f[s_, val_] := [email protected][#, 
        [email protected]@s, "=", [email protected]]&/@ctxs[]; 
0

Để cung cấp cho tất cả các máy tính xách tay bối cảnh độc đáo mở Tùy chọn Inspector và thiết lập di động Tùy chọnTùy chọn đánh giáBối cảnh di-Notebook.

Các vấn đề liên quan