'\" '\" Copyright (c) 1996 Sun Microsystems, Inc. '\" '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" '\" RCS: @(#) $Id: package.n,v 1.2 2003/11/24 05:09:59 bbbush Exp $ '\" '\" The definitions below are for supplemental macros used in Tcl/Tk '\" manual entries. '\" '\" .AP type name in/out ?indent? '\" Start paragraph describing an argument to a library procedure. '\" type is type of argument (int, etc.), in/out is either "in", "out", '\" or "in/out" to describe whether procedure reads or modifies arg, '\" and indent is equivalent to second arg of .IP (shouldn't ever be '\" needed; use .AS below instead) '\" '\" .AS ?type? ?name? '\" Give maximum sizes of arguments for setting tab stops. Type and '\" name are examples of largest possible arguments that will be passed '\" to .AP later. If args are omitted, default tab stops are used. '\" '\" .BS '\" Start box enclosure. From here until next .BE, everything will be '\" enclosed in one large box. '\" '\" .BE '\" End of box enclosure. '\" '\" .CS '\" Begin code excerpt. '\" '\" .CE '\" End code excerpt. '\" '\" .VS ?version? ?br? '\" Begin vertical sidebar, for use in marking newly-changed parts '\" of man pages. The first argument is ignored and used for recording '\" the version when the .VS was added, so that the sidebars can be '\" found and removed when they reach a certain age. If another argument '\" is present, then a line break is forced before starting the sidebar. '\" '\" .VE '\" End of vertical sidebar. '\" '\" .DS '\" Begin an indented unfilled display. '\" '\" .DE '\" End of indented unfilled display. '\" '\" .SO '\" Start of list of standard options for a Tk widget. The '\" options follow on successive lines, in four columns separated '\" by tabs. '\" '\" .SE '\" End of list of standard options for a Tk widget. '\" '\" .OP cmdName dbName dbClass '\" Start of description of a specific option. cmdName gives the '\" option's name as specified in the class command, dbName gives '\" the option's name in the option database, and dbClass gives '\" the option's class in the option database. '\" '\" .UL arg1 arg2 '\" Print arg1 underlined, then print arg2 normally. '\" '\" RCS: @(#) $Id: package.n,v 1.2 2003/11/24 05:09:59 bbbush Exp $ '\" '\" # Set up traps and other miscellaneous stuff for Tcl/Tk man pages. .if t .wh -1.3i ^B .nr ^l \n(.l .ad b '\" # Start an argument description .de AP .ie !"\\$4"" .TP \\$4 .el \{\ . ie !"\\$2"" .TP \\n()Cu . el .TP 15 .\} .ta \\n()Au \\n()Bu .ie !"\\$3"" \{\ \&\\$1 \\fI\\$2\\fP (\\$3) .\".b .\} .el \{\ .br .ie !"\\$2"" \{\ \&\\$1 \\fI\\$2\\fP .\} .el \{\ \&\\fI\\$1\\fP .\} .\} .. '\" # define tabbing values for .AP .de AS .nr )A 10n .if !"\\$1"" .nr )A \\w'\\$1'u+3n .nr )B \\n()Au+15n .\" .if !"\\$2"" .nr )B \\w'\\$2'u+\\n()Au+3n .nr )C \\n()Bu+\\w'(in/out)'u+2n .. .AS Tcl_Interp Tcl_CreateInterp in/out '\" # BS - start boxed text '\" # ^y = starting y location '\" # ^b = 1 .de BS .br .mk ^y .nr ^b 1u .if n .nf .if n .ti 0 .if n \l'\\n(.lu\(ul' .if n .fi .. '\" # BE - end boxed text (draw box now) .de BE .nf .ti 0 .mk ^t .ie n \l'\\n(^lu\(ul' .el \{\ .\" Draw four-sided box normally, but don't draw top of .\" box if the box started on an earlier page. .ie !\\n(^b-1 \{\ \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .el \}\ \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\l'|0u-1.5n\(ul' .\} .\} .fi .br .nr ^b 0 .. '\" # VS - start vertical sidebar '\" # ^Y = starting y location '\" # ^v = 1 (for troff; for nroff this doesn't matter) .de VS .if !"\\$2"" .br .mk ^Y .ie n 'mc \s12\(br\s0 .el .nr ^v 1u .. '\" # VE - end of vertical sidebar .de VE .ie n 'mc .el \{\ .ev 2 .nf .ti 0 .mk ^t \h'|\\n(^lu+3n'\L'|\\n(^Yu-1v\(bv'\v'\\n(^tu+1v-\\n(^Yu'\h'-|\\n(^lu+3n' .sp -1 .fi .ev .\} .nr ^v 0 .. '\" # Special macro to handle page bottom: finish off current '\" # box/sidebar if in box/sidebar mode, then invoked standard '\" # page bottom macro. .de ^B .ev 2 'ti 0 'nf .mk ^t .if \\n(^b \{\ .\" Draw three-sided box if this is the box's first page, .\" draw two sides but no top otherwise. .ie !\\n(^b-1 \h'-1.5n'\L'|\\n(^yu-1v'\l'\\n(^lu+3n\(ul'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .el \h'-1.5n'\L'|\\n(^yu-1v'\h'\\n(^lu+3n'\L'\\n(^tu+1v-\\n(^yu'\h'|0u'\c .\} .if \\n(^v \{\ .nr ^x \\n(^tu+1v-\\n(^Yu \kx\h'-\\nxu'\h'|\\n(^lu+3n'\ky\L'-\\n(^xu'\v'\\n(^xu'\h'|0u'\c .\} .bp 'fi .ev .if \\n(^b \{\ .mk ^y .nr ^b 2 .\} .if \\n(^v \{\ .mk ^Y .\} .. '\" # DS - begin display .de DS .RS .nf .sp .. '\" # DE - end display .de DE .fi .RE .sp .. '\" # SO - start of list of standard options .de SO .SH "STANDARD OPTIONS" .LP .nf .ta 5.5c 11c .ft B .. '\" # SE - end of list of standard options .de SE .fi .ft R .LP See the \\fBoptions\\fR manual entry for details on the standard options. .. '\" # OP - start of full description for a single option .de OP .LP .nf .ta 4c Command-Line Name: \\fB\\$1\\fR Database Name: \\fB\\$2\\fR Database Class: \\fB\\$3\\fR .fi .IP .. '\" # CS - begin code excerpt .de CS .RS .nf .ta .25i .5i .75i 1i .. '\" # CE - end code excerpt .de CE .fi .RE .. .de UL \\$1\l'|0\(ul'\\$2 .. .TH package 3tcl 7.5 Tcl "Tcl Built-In Commands" .BS '\" Note: do not modify the .SH NAME line immediately below! .SH NAME package \- 裝載包和版本控制的設施 .SH "總覽 SYNOPSIS" .nf \fBpackage forget ?\fIpackage package ...\fR? \fBpackage ifneeded \fIpackage version\fR ?\fIscript\fR? \fBpackage names\fR \fBpackage present \fR?\fB\-exact\fR? \fIpackage \fR?\fIversion\fR? \fBpackage provide \fIpackage \fR?\fIversion\fR? \fBpackage require \fR?\fB\-exact\fR? \fIpackage \fR?\fIversion\fR? \fBpackage unknown \fR?\fIcommand\fR? \fBpackage vcompare \fIversion1 version2\fR \fBpackage versions \fIpackage\fR \fBpackage vsatisfies \fIversion1 version2\fR .fi .BE .SH "描述 DESCRIPTION" .PP 這個命令維持由當前直譯器使用的可獲得的包以及如何把它們裝載到直譯器中的一個簡單的資料庫。它支援每個包的多個版本,並基於應用的需要安排裝載一個包的正確的版本。這個命令還檢測並報告版本衝突。典型的,在通常的 Tcl 指令碼中只調用 \fBpackage require\fR 和 \fBpackage provide\fR 命令;其他命令主要被系統指令碼用來維護包資料庫。 .PP \fBpackage\fR 命令的行為由它的第一個引數確定。允許下列形式: .TP \fBpackage forget ?\fIpackage package ...\fR? 從這個直譯器中刪除關於每個指定的包的所有資訊,包括由 \fBpackage ifneeded\fR 和 \fBpackage provide\fR 提供的資訊。 .TP \fBpackage ifneeded \fIpackage version\fR ?\fIscript\fR? 這個命令典型的只出現在系統配置指令碼中,被用來設定包資料庫。若需要一個特定的包的一個特定的版本,它指示如果這個包的這個版本是可獲得的,可透過執行 \fIscript\fR 來把這個包來增加到直譯器上。指令碼儲存在一個數據庫中,由隨後的 \fBpackage require\fR 命令使用;典型的,\fIscript\fR 為在包中的命令設定自動裝載(或直接呼叫 \fBload\fR 和/或 \fBsource\fR),接著呼叫\fBpackage provide\fR 來指示這個包已經存在。在資料庫中可以有一個單一的包的多個版本的資訊。如果資料庫已經包含了對 \fIpackage\fR 和 \fIversion\fR 的資訊,則新 \fIscript\fR 替換現存的指令碼。如果省略了 \fIscript\fR 引數,返回包 \fIpackage\fR 的版本 \fIversion\fR 的當前指令碼,如果未對這個 \fIpackage\fR 和 \fIversion\fR 呼叫 \fBpackage ifneeded\fR 命令則返回一個空串。 .TP \fBpackage names\fR 返回在這個直譯器中所有包的名字,為這些包提供了一個版本(透過 \fBpackage provide\fR)或可獲得給它們的 \fBpackage ifneeded\fR 指令碼。在列表中的元素的次序是任意的。 .TP \fBpackage present \fR?\fB\-exact\fR? \fIpackage \fR?\fIversion\fR? 除了在包沒有裝載時它不嘗試並裝載它之外,這個命令等價於 \fBpackage require\fR。 .TP \fBpackage provide \fIpackage \fR?\fIversion\fR? 呼叫這個命令來指示在這個直譯器中包 \fIpackage\fR 的這個版本 \fIversion\fR 現在已經存在。它典型的被作為一個 \fBifneeded\fR指令碼的一部分而呼叫一次,並在包最終裝載時被包自身再次呼叫。如果以前的 \fBpackage provide\fR 命令已經提供的 \fIpackage\fR 的一個不同的版本則生成一個錯誤。如果省略了 \fIversion\fR 引數,則命令返回當前提供包的版本號,如果在這個直譯器中對 \fIpackage\fR 沒有呼叫 \fBpackage provide\fR 命令則返回一個空串。 .TP \fBpackage require \fR?\fB\-exact\fR? \fIpackage \fR?\fIversion\fR? 這個命令典型的被想要使用特定包的特定版本的 Tcl 指令碼呼叫。引數指示想要哪個包,和確保把包的合適版本裝載到直譯器中的命令。如果命令成功執行,它返回裝載的包的版本號;否則生成一個錯誤。如果同時指定了 \fB-exact\fR 開關和 \fIversion\fR 選項,則只接受給定版本。如果省略了 \fB-exact\fR 但指定了 \fIversion\fR ,則主版本號與 \fIversion \fR相同但晚於 \fIversion\fR 的版本也可以接受。如果省略了 \fB-exact\fR 和 \fIversion\fR二者則任何版本都可接受。如果已經提供了 \fIpackage\fR 的一個版本(透過呼叫 \fBpackage provide\fR 命令),則它的版本號必須滿足由\fB-exact\fR 和 \fIversion\fR 給出的條件並且命令立即返回。否則,命令查詢由以前的\fBpackage ifneeded\fR 命令提供的資訊的資料庫,看是否能獲得一個可接受的版本。如果有,則呼叫最可接受的版本號的指令碼;它必須做所有裝載這個包所必須的工作,包括呼叫為這個包呼叫 \fBpackage provide\fR。如果 \fBpackage ifneeded\fR資料庫不包含這個包的可接受的版本並且為這個直譯器指定了一個 \fBpackage unknown\fR 命令則呼叫這個命令;當它完成的時候,Tcl 再次檢查是否現在提供了這個包或是否有一個給它的 \fBpackage ifneeded\fR指令碼。如果所有這些步驟不能提供這個包的一個可接受的版本,則命令返回一個錯誤。 .TP \fBpackage unknown \fR?\fIcommand\fR? 這個命令提供在一個“最後一搏”(``last resort'') 命令,在 \fBpackage require\fR 期間如果 \fBpackage ifneeded\fR 資料庫中沒有一個包的合適的版本可呼叫這個命令。如果提供了 \fIcommand\fR 引數,它包含一個命令的第一部分,在一次 \fBpackage require\fR 命令期間呼叫這個命令的時候,Tcl 新增給出所須的包的名字和版本的兩個附加引數。例如,如果 \fIcommand\fR是 \fBfoo bar\fR 並且後來呼叫了命令 \fBpackage require test 2.4\fR,則 Tcl 將執行命令 \fBfoo bar test 2.4\fR 來裝載這個包。如果未給 \fBpackage require\fR 命令提供版本號,則給這個被呼叫的命令的版本引數是一個空串。如果 \fBpackage unknown\fR命令但不加 \fIcommand\fR 引數,則返回當前的 \fBpackage unknown\fR 指令碼,如果沒有就返回一個空串。如果指定 \fIcommand\fR 為一個空串,若當前有 \fBpackage unknown\fR 指令碼則刪除它。 .TP \fBpackage vcompare \fIversion1 version2\fR 比較由 \fIversion1\fR和 \fIversion2 \fR給出的兩個版本。如果 \fIversion1\fR 比 \fIversion2 \fR早就返回 -1,如果相同則返回0,如果 \fIversion1\fR 比 \fIversion2 \fR晚則返回 1。 .TP \fBpackage versions \fIpackage\fR 返回 \fIpackage\fR 的所有版本號,透過 \fBpackage ifneeded\fR 命令為它們提供了資訊。 .TP \fBpackage vsatisfies \fIversion1 version2\fR 如果為 \fIversion2\fR 寫的指令碼不須更改就可為 \fIversion1\fR 工作則返回 1(例如,\fIversion1\fR 大於等於 \fIversion2\fR 並且有相同的主版本號),否則返回 0。 .SH "版本號 VERSION NUMBERS" .PP 版本號由一個或多個用點號分隔的十進位制陣列成,比如 2 或 1.162 或 3.1.13.1。第一個數叫做主版本號。越大的數對應一個包的越晚的版本,最左邊的數有更大的權重(significance). 例如,版本 2.1 比 1.3 晚而版本 3.4.6 比 3.3.5 晚。遺漏的欄位等價於零: 版本 1.3 於版本 1.3.0 和 1.3.0.0 相同,所以它比 1.3.1 和 1.3.0.2 早。假定一個晚期版本向上(upward)相容有相同主版本號的早期版本。 例如,為一個包的版本 2.3 寫的 Tcl 指令碼應當在版本 2.3.2、2.4、和 2.5.1 下不須更改就能工作。主版本號的變更表示有不相容的變更: 如果程式碼是使用了一個包的版本 2.1 寫成的,不保證在版本 1.7.3 或版本 3.1 下不須更改就能工作。 .SH "包索引 PACKAGE INDICES" .PP 推薦的在 Tcl 中使用包的方式是在指令碼中呼叫 \fBpackage require\fR 和 \fBpackage provide\fR 命令,並使用過程 \fBpkg_mkIndex\fR 來建立包索引檔案。一旦你已經這樣做了,將自動的裝載包來響應 \fBpackage require\fR 命令。詳情請參見 \fBpkg_mkIndex\fR 的文件。 .SH "參見 SEE ALSO" msgcat(n), packagens(n), pkgMkIndex(n) .SH "關鍵字 KEYWORDS" package, version .SH "[中文版維護人]" .B 寒蟬退士 .SH "[中文版最新更新]" .B 2001/08/31 .SH "《中國 Linux 論壇 man 手冊頁翻譯計劃》:" .BI http://cmpp.linuxforum.net .SH "跋" .br 本頁面中文版由中文 man 手冊頁計劃提供。 .br 中文 man 手冊頁計劃:\fBhttps://github.com/man-pages-zh/manpages-zh\fR