Function.Invoke เรียกใช้ฟังก์ชันโดยส่งรายการอาร์กิวเมนต์เป็นพารามิเตอร์ ใช้สำหรับการเรียกฟังก์ชันแบบไดนามิก
= Function.Invoke(function as function, args as list) as any
= Function.Invoke(function as function, args as list) as any
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| function | function | Yes | ฟังก์ชันที่ต้องการเรียกใช้ (เช่น Record.FieldNames, List.Sum, Text.Combine) | |
| args | list | Yes | รายการ (list) ที่ประกอบด้วยอาร์กิวเมนต์ที่ต้องการส่งให้ฟังก์ชัน |
let MyRecord = [A = 1, B = 2, C = 3], Result = Function.Invoke(Record.FieldNames, {MyRecord}) in Resultlet
MyRecord = [A = 1, B = 2, C = 3],
Result = Function.Invoke(Record.FieldNames, {MyRecord})
in
Result
{"A", "B", "C"}
let Words = {"Hello", "Power", "Query"}, Separator = " ", Result = Function.Invoke(Text.Combine, {Words, Separator}) in Resultlet
Words = {"Hello", "Power", "Query"},
Separator = " ",
Result = Function.Invoke(Text.Combine, {Words, Separator})
in
Result
"Hello Power Query"
let Numbers = {1, 2, 3, 4, 5}, Operation = "Sum", ChosenFunction = if Operation = "Sum" then List.Sum else List.Average, Result = Function.Invoke(ChosenFunction…let
Numbers = {1, 2, 3, 4, 5},
Operation = "Sum",
ChosenFunction = if Operation = "Sum" then List.Sum else List.Average,
Result = Function.Invoke(ChosenFunction, {Numbers})
in
Result
15 (ถ้า Operation="Sum")
let Numbers = {10, 20, 30}, Result = Function.Invoke(List.Sum, {Numbers}) in Resultlet
Numbers = {10, 20, 30},
Result = Function.Invoke(List.Sum, {Numbers})
in
Result
60
ถ้ารู้ฟังก์ชันแน่นอน ให้เรียกตรงๆเลยจะชัดเจนกว่า แต่ถ้าต้องเลือกฟังก์ชันตามเงื่อนไข จึงใช้ Function.Invoke
ใช่ args ต้องเป็น list เสมอ แม้ว่าฟังก์ชันจะมี argument ตัวเดียว ก็ต้องใส่ {argument} ในรูปแบบรายการ
ได้ แต่ต้องใส่ argument ในลำดับที่ถูกต้อง ถ้าไม่ใช้ optional argument ก็ไม่ต้องใส่ในรายการ
Function.Invoke มีมาตั้งแต่ Power Query 2016 ขึ้นไป
Function.Invoke(function, args) ใช้เรียกใช้ฟังก์ชันแบบไดนามิก โดยส่งฟังก์ชันเป้าหมายและรายการอาร์กิวเมนต์ไปยังฟังก์ชันนี้
เพื่อให้เข้าใจชัดเจน ส่วนมากการเรียกฟังก์ชันตรงๆ เราทำได้เลย เช่น List.Sum({1,2,3}) แต่ถ้าเราต้องการให้โปรแกรมตัดสินใจว่าจะใช้ฟังก์ชันไหน ตามเงื่อนไขที่เปลี่ยนไป ก็จะใช้ Function.Invoke ช่วยเรียกฟังก์ชันแบบไดนามิก
ที่เจ๋งคือ Function.Invoke ทำให้คุณส่งอาร์กิวเมนต์ไปหลายตัวในรูปแบบรายการได้ ไม่ต้องเขียนอาร์กิวเมนต์ทีละตัว เหมาะมากสำหรับ higher-order functions และการสร้าง wrapper logic ครับ 😎