Tcl - แพ็คเกจ

แพ็กเกจใช้สำหรับสร้างหน่วยโค้ดที่ใช้ซ้ำได้ แพ็กเกจประกอบด้วยชุดไฟล์ที่มีฟังก์ชันการทำงานเฉพาะ คอลเล็กชันของไฟล์นี้ระบุโดยชื่อแพ็กเกจและสามารถมีไฟล์เดียวกันได้หลายเวอร์ชัน แพคเกจสามารถเป็นชุดของสคริปต์ Tcl ไลบรารีไบนารีหรือทั้งสองอย่างรวมกัน

แพ็คเกจใช้แนวคิดของเนมสเปซเพื่อหลีกเลี่ยงการชนกันของชื่อตัวแปรและชื่อโพรซีเดอร์ ดูเพิ่มเติมในบทแนะนำ ' เนมสเปซ ' ถัดไปของเรา

การสร้างแพ็คเกจ

สามารถสร้างแพ็คเกจได้ด้วยความช่วยเหลือของไฟล์ขั้นต่ำสองไฟล์ ไฟล์หนึ่งมีรหัสแพ็คเกจ ไฟล์อื่นมีไฟล์แพ็กเกจดัชนีสำหรับการประกาศแพ็กเกจของคุณ

รายการขั้นตอนในการสร้างและใช้งานแพ็คเกจมีให้ด้านล่าง

ขั้นตอนที่ 1: การสร้างรหัส

สร้างรหัสสำหรับแพ็คเกจภายในโฟลเดอร์พูดว่า HelloWorld ให้ไฟล์ชื่อ HelloWorld.tcl พร้อมรหัสดังภาพด้านล่าง -

# /Users/rajkumar/Desktop/helloworld/HelloWorld.tcl 
# Create the namespace
namespace eval ::HelloWorld {
 
  # Export MyProcedure
  namespace export MyProcedure
 
  # My Variables
   set version 1.0
   set MyDescription "HelloWorld"
 
  # Variable for the path of the script
   variable home [file join [pwd] [file dirname [info script]]]
 
}
 
# Definition of the procedure MyProcedure
proc ::HelloWorld::MyProcedure {} {
   puts $HelloWorld::MyDescription
}

package provide HelloWorld $HelloWorld::version
package require Tcl 8.0

ขั้นตอนที่ 2: การสร้างดัชนีแพ็คเกจ

เปิด tclsh เปลี่ยนเป็นไดเรกทอรี HelloWorld และใช้คำสั่ง pkg_mkIndex เพื่อสร้างไฟล์ดัชนีดังที่แสดงด้านล่าง -

% cd /Users/rajkumar/Desktop/helloworld 
% pkg_mkIndex . *.tcl

ขั้นตอนที่ 3: การเพิ่ม Directory ใน Autopath

ใช้คำสั่ง lappend เพื่อเพิ่มแพ็คเกจในรายการส่วนกลางดังที่แสดงด้านล่าง -

% lappend auto_path "/Users/rajkumar/Desktop/helloworld"

ขั้นตอนที่ 4: การเพิ่มแพ็คเกจ

เพิ่มแพ็กเกจต่อไปในโปรแกรมโดยใช้คำสั่ง package require ดังแสดงด้านล่าง -

% package require HelloWorld 1.0

ขั้นตอนที่ 5: เรียกใช้ขั้นตอน

ตอนนี้ทุกอย่างกำลังตั้งค่าเราสามารถเรียกใช้ขั้นตอนของเราได้ดังที่แสดงด้านล่าง -

% puts [HelloWorld::MyProcedure]

คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

HelloWorld

สองขั้นตอนแรกสร้างแพ็คเกจ เมื่อสร้างแพคเกจแล้วคุณสามารถใช้มันในไฟล์ Tcl ใดก็ได้โดยเพิ่มสามคำสั่งสุดท้ายดังที่แสดงด้านล่าง -

lappend auto_path "/Users/rajkumar/Desktop/helloworld"
package require HelloWorld 1.0
puts [HelloWorld::MyProcedure]

คุณจะได้รับผลลัพธ์ดังต่อไปนี้ -

HelloWorld