แชร์ผ่าน


ฟังก์ชัน RecordOf และ Type

ใช้กับ: แอปพื้นที่ทำงาน

สร้างชนิดที่ผู้ใช้กำหนดเพื่อใช้กับฟังก์ชันที่ผู้ใช้กำหนดและค่าที่ไม่ได้กำหนดชนิด

สำคัญ

Description

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

เมื่อสร้างฟังก์ชันที่ผู้ใช้กำหนดคุณต้องระบุประเภทอินพุตและเอาต์พุต สำหรับชนิดง่ายๆ เช่น ทศนิยม หรือ ข้อความ เป็นเรื่องง่ายเนื่องจากชนิดพื้นฐานเหล่านี้ถูกกำหนดไว้ล่วงหน้า สำหรับชนิดที่ซับซ้อนมากขึ้น เช่น เรกคอร์ดหรือตาราง ให้ใช้ฟังก์ชัน Type เพื่อสร้างชนิด

ฟังก์ชัน Type ยังช่วยให้ใช้ออบเจ็กต์ที่ไม่ได้ระบุชนิดทำงานได้ง่ายขึ้น ด้วยฟังก์ชัน ParseJSON, IsType และ AsType ออบเจ็กต์ที่ไม่ได้ระบุชนิดสามารถแปลงเป็นออบเจ็กต์ที่ระบุชนิด ซึ่งทำให้คอลัมน์ไม่จำเป็นต้องพิมพ์ทีละคอลัมน์ ณ จุดใช้งานอีกต่อไป

ฟังก์ชัน Type ใช้ TypeSpecification เนื่องจากเป็นเพียงอาร์กิวเมนต์เท่านั้น ข้อกำหนดเฉพาะชนิดที่ง่ายที่สุดคือการอ้างอิงชนิดที่มีอยู่ เช่น Type( Text ) ข้อกำหนดชนิดสำหรับเรกคอร์ดหรือตารางคล้ายกับการกำหนดเรกคอร์ดหรือตารางที่มีค่าตามตัวอักษร ซึ่งค่าจะถูกแทนที่ด้วยชื่อชนิด ตัวอย่างเช่น {Name: "Jane"} จะถูกกำหนดชนิดด้วย Type( {Name: Text} ) ตารางถูกระบุด้วยวงเล็บเหลี่ยม ไม่ใช่ฟังก์ชัน Table และสามารถระบุได้เพียงเรกคอร์ดเดียวเท่านั้น ตัวอย่างเช่น [1,2,3] จะถูกกำหนดชนิดด้วย Type( [Number] )

ใช้ฟังก์ชัน RecordOf เพื่อแยกชนิดของเรกคอร์ดออกจากชนิดตาราง ตัวอย่างเช่น Type( RecordOf( Library ) ) จะส่งคืนชนิดของหนังสือเล่มเดียวจากห้องสมุด เมื่อต้องการสร้างชนิดตารางจากชนิดเรกคอร์ด ให้ตัดชนิดเรกคอร์ดในวงเล็บเหลี่ยม ตัวอย่างเช่น Type( [ Book ] ) กำหนดห้องสมุด RecordOf สามารถใช้ได้ภายในฟังก์ชัน Type เท่านั้น

ฟังก์ชัน Type และค่าชนิดที่ส่งคืนสามารถใช้ได้ในที่ที่เฉพาะเจาะจงใน Power Fx เท่านั้น เช่น อาร์กิวเมนต์ที่สองของ ParseJSON ในแอปพื้นที่ทำงาน ฟังก์ชัน Type สามารถใช้กับสูตรที่มีชื่อใน App.Formulas

ไวยากรณ์

RecordOf(TableType)

  • TableType – จำเป็น ชื่อชนิดของตาราง ซึ่งไม่ยอมรับข้อกำหนดเฉพาะชนิด แต่ต้องเป็นชื่อของชนิดที่ได้รับการกำหนดไว้ก่อนหน้านี้สำหรับตาราง

Type(TypeSpecification)

  • TypeSpecification – จำเป็น ข้อกำหนดเฉพาะชนิด

ตัวอย่าง

ฟังก์ชัน Type

พิจารณาคำจำกัดความต่อไปนี้ใน App.Formulas:

Library = 
  [ { Title: "A Study in Scarlet", Author: "Sir Arthur Conan Doyle", Published: 1887 }, 
    { Title: "And Then There Were None", Author: "Agatha Christie", Published: 1939 },
    { Title: "The Marvelous Land of Oz", Author: "L. Frank Baum", Published: 1904 } ];

// Type definition for a single book
BookType := Type( { Title: Text, Author: Text, Published: Number } );

// Type definition for a table of books
LibraryType := Type( [ BookType ] );

สังเกตว่าข้อความชื่อเรื่องจริง "A Study in Scarlet" ถูกแทนที่ด้วยชื่อชนิด Text ในข้อกำหนดเฉพาะชนิด ซึ่งเป็นตัวยึดสำหรับค่าข้อความใดๆ พารามิเตอร์หรือตัวแปรชนิด BookType สามารถเก็บหนังสือเล่มใดเล่มหนึ่งไว้ Library ในขณะที่ LibraryType สามารถเก็บทั้งตาราง ด้วยประเภทเหล่านี้เราสามารถกำหนดฟังก์ชันที่ผู้ใช้กำหนดเหล่านี้ได้:

SortedBooks( books: LibraryType ): LibraryType = 
    SortByColumns( Library, Author, SortOrder.Ascending, Title, SortOrder.Ascending );

PublishedInLeapYear( book: BookType ): Boolean = 
    Mod( book.Published, 4 ) = 0 And 
    (Mod( book.Published, 100 ) <> 0 Or Mod( book.Published, 400 ) = 0);

คุณยังสามารถใช้ BookType เพื่อแยกวิเคราะห์สตริง JSON ที่มีหนังสือ:

ParseJSON( "{""Title"":""Gulliver's Travels"", ""Author"": ""Jonathan Swift"", ""Published"": 1900}", BookType
)

การใช้ BookType เป็นอาร์กิวเมนต์ที่สองของ ParseJSON ส่งผลต่อเรกคอร์ดที่ระบุชนิดซึ่งสามารถใช้ได้เหมือนกับเรกคอร์ด Power Fx อื่นๆ

ฟังก์ชัน RecordOf

ในตัวอย่างฟังก์ชัน Type คุณเริ่มต้นด้วย BookType และสร้าง LibraryType โดยการครอบตารางไว้รอบๆ เราสามารถกำหนดประเภทเหล่านี้ในทางกลับกันกับ:

// Type definition for a table of books
RecordOfLibraryType := Type( [ { Title: Text, Author: Text, Published: Number } ] );

// Type definition for a single book
RecordOfBookType := Type( RecordOf( RecordOfLibraryType ) );