
- CoffeeScript 教程
- CoffeeScript - 首頁
- CoffeeScript - 概述
- CoffeeScript - 環境
- CoffeeScript - 命令列工具
- CoffeeScript - 語法
- CoffeeScript - 資料型別
- CoffeeScript - 變數
- CoffeeScript - 運算子和別名
- CoffeeScript - 條件語句
- CoffeeScript - 迴圈
- CoffeeScript - 列表推導式
- CoffeeScript - 函式
- CoffeeScript 面向物件
- CoffeeScript - 字串
- CoffeeScript - 陣列
- CoffeeScript - 物件
- CoffeeScript - 範圍
- CoffeeScript - 展開運算子
- CoffeeScript - 日期
- CoffeeScript - 數學
- CoffeeScript - 異常處理
- CoffeeScript - 正則表示式
- CoffeeScript - 類和繼承
- CoffeeScript 高階
- CoffeeScript - Ajax
- CoffeeScript - jQuery
- CoffeeScript - MongoDB
- CoffeeScript - SQLite
- CoffeeScript 有用資源
- CoffeeScript - 快速指南
- CoffeeScript - 有用資源
- CoffeeScript - 討論
CoffeeScript - 展開運算子
在之前的章節中,我們學習瞭如何定義函式、呼叫函式以及向函式傳遞引數。通常情況下,我們可以向函式傳遞固定數量的引數。但在程式設計過程中,我們可能會遇到需要向函式傳遞可變數量引數的情況。在 JavaScript 中,我們使用物件來接收函式的可變數量引數。
CoffeeScript 提供了一個名為 **展開運算子** 的特性,用於向函式傳遞多個引數。我們在函式中使用展開運算子,在引數名後新增三個點,表示為 **...**
語法
以下是使用展開運算子在函式中接收多個引數的語法。
my_function = (arguments...)-> ............ ............ ............
示例
以下是用展開運算子在函式中接收多個引數的示例。這裡我們定義了一個名為 **indian_team()** 的函式,使用了展開運算子。我們三次呼叫此函式,分別傳遞 4 名球員、6 名球員和完整的陣容。由於我們在函式定義中使用了展開運算子,因此每次呼叫時它都可以接受可變數量的引數。將此程式碼儲存在名為 **splats_definition.coffee** 的檔案中。
indian_team = (first, second, others...) -> Captain = first WiseCaptain = second team = others console.log "Captain: " +Captain console.log "Wise captain: " +WiseCaptain console.log "Other team members: " +team #Passing 4 arguments console.log "############## Four Players ############" indian_team "Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma" #Passing 6 arguments console.log "############## Six Players ############" indian_team "Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma", "Gurkeerat Singh Mann", "Rishi Dhawan" #Passing full squad console.log "############## Full squad #############" indian_team "Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma", "Gurkeerat Singh Mann", "Rishi Dhawan", "Ravindra Jadeja", "Axar Patel", "Jasprit Bumrah", "Umesh Yadav", "Harbhajan Singh", "Ashish Nehra", "Hardik Pandya", "Suresh Raina", "Yuvraj Singh", "Ajinkya Rahane"
開啟 **命令提示符** 並編譯 .coffee 檔案,如下所示。
c:\> coffee -c splats_definition.coffee
編譯後,它會生成以下 JavaScript 程式碼。
// Generated by CoffeeScript 1.10.0 (function() { var indian_team, slice = [].slice; indian_team = function() { var Captain, WiseCaptain, first, others, second, team; first = arguments[0], second = arguments[1], others = 3 <= arguments.length ? slice.call(arguments, 2) : []; Captain = first; WiseCaptain = second; team = others; console.log("Captain: " + Captain); console.log("Wise captain: " + WiseCaptain); return console.log("Other team members: " + team); }; console.log("############## Four Players ############"); indian_team("Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma"); console.log("############## Six Players ############"); indian_team("Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma", "Gurkeerat Singh Mann", "Rishi Dhawan"); console.log("############## Full squad #############"); indian_team("Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma", "Gurkeerat Singh Mann", "Rishi Dhawan", "Ravindra Jadeja", "Axar Patel", "Jasprit Bumrah", "Umesh Yadav", "Harbhajan Singh", "Ashish Nehra", "Hardik Pandya", "Suresh Raina", "Yuvraj Singh", "Ajinkya Rahane"); }).call(this);
現在,再次開啟 **命令提示符** 並執行 CoffeeScript 檔案,如下所示。
c:\> coffee splats_definition.coffee
執行後,CoffeeScript 檔案會產生以下輸出。
############## Four Players ############ Captain: Mahendra Singh Dhoni Wise captain: Virat Kohli Other team members: Shikhar Dhawan,Rohit Sharma ############## Six Players ############ Captain: Mahendra Singh Dhoni Wise captain: Virat Kohli Other team members: Shikhar Dhawan,Rohit Sharma,Gurkeerat Singh Mann,Rishi Dhawan ############## Full squad ############# Captain: Mahendra Singh Dhoni Wise captain: Virat Kohli Other team members: Shikhar Dhawan,Rohit Sharma,Gurkeerat Singh Mann,Rishi Dhawan,Ravindra Jadeja,Axar Patel,Jasprit Bumrah,Umesh Yadav,Harbhajan Singh,Ashish Nehra,Hardik Pandya,Suresh Raina,Yuvraj Singh,Ajinkya Rahane
使用展開運算子呼叫函式
我們也可以使用展開運算子呼叫函式。為此,我們必須建立一個包含需要傳遞給函式的元素的陣列,然後透過傳遞字尾為三個點的陣列來呼叫函式,如下所示。
my_function values...
示例
以下是用展開運算子呼叫函式的示例。將此程式碼儲存在名為 **splats_call.coffee** 的檔案中。
indian_team = (first, second, others...) -> Captain = first WiseCaptain = second team = others console.log "Captain: " +Captain console.log "Wise captain: " +WiseCaptain console.log "Other team members: " +team squad = [ "Mahendra Singh Dhoni" "Virat Kohli" "Shikhar Dhawan" "Rohit Sharma" "Gurkeerat Singh Mann" "Rishi Dhawan" "R Ashwin" "Ravindra Jadeja" "Axar Patel" "Jasprit Bumrah" "Umesh Yadav" "Harbhajan Singh" "Ashish Nehra" "Hardik Pandya" "Suresh Raina" "Yuvraj Singh" "Ajinkya Rahane" ] indian_team squad...
開啟 **命令提示符** 並編譯 .coffee 檔案,如下所示。
c:\> coffee -c splats_call.coffee
編譯後,它會生成以下 JavaScript 程式碼。
// Generated by CoffeeScript 1.10.0 (function() { var indian_team, squad, slice = [].slice; indian_team = function() { var Captain, WiseCaptain, first, others, second, team; first = arguments[0], second = arguments[1], others = 3 <= arguments.length ? slice.call(arguments, 2) : []; Captain = first; WiseCaptain = second; team = others; console.log("Captain: " + Captain); console.log("Wise captain: " + WiseCaptain); return console.log("Other team members: " + team); }; squad = ["Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma", "Gurkeerat Singh Mann", "Rishi Dhawan", "R Ashwin", "Ravindra Jadeja", "Axar Patel", "Jasprit Bumrah", "Umesh Yadav", "Harbhajan Singh", "Ashish Nehra", "Hardik Pandya", "Suresh Raina", "Yuvraj Singh", "Ajinkya Rahane"]; indian_team.apply(null, squad); }).call(this);
現在,再次開啟 **命令提示符** 並執行 CoffeeScript 檔案,如下所示。
c:\> coffee splats_call.coffee
執行後,CoffeeScript 檔案會產生以下輸出。
Captain: Mahendra Singh Dhoni Wise captain: Virat Kohli Other team members: Shikhar Dhawan,Rohit Sharma,Gurkeerat Singh Mann,Rishi Dhawan,R Ashwin,Ravindra Jadeja,Axar Patel,Jasprit Bumrah,Umesh Yadav,Harbhajan Singh,Ashish Nehra,Hardik Pandya,Suresh Raina,Yuvraj Singh,Ajinkya Rahane
帶有尾部引數的展開運算子
我們還可以向展開運算子傳遞尾部引數。在下面的示例中,我們在展開運算子之後傳遞了一個名為 **last** 的尾部引數。將此示例儲存在名為 **tailing_arguments.coffee** 的檔案中。
indian_team = (first, second, others..., last) -> Captain = first WiseCaptain = second team = others Wicketkeeper =last console.log "Captain: " +Captain console.log "Wise captain: " +WiseCaptain console.log "Wicket keeper is:"+last console.log "Other team members: " +team squad = [ "Mahendra Singh Dhoni" "Virat Kohli" "Shikhar Dhawan" "Rohit Sharma" "Gurkeerat Singh Mann" "Rishi Dhawan" "R Ashwin" "Ravindra Jadeja" "Axar Patel" "Jasprit Bumrah" "Umesh Yadav" "Harbhajan Singh" "Ashish Nehra" "Hardik Pandya" "Suresh Raina" "Yuvraj Singh" "Ajinkya Rahane" ] indian_team squad...
開啟 **命令提示符** 並編譯 .coffee 檔案,如下所示。
c:\> coffee -c tailing_arguments.coffee
編譯後,它會生成以下 JavaScript 程式碼。
// Generated by CoffeeScript 1.10.0 (function() { var indian_team, squad, slice = [].slice; indian_team = function() { var Captain, Wicketkeeper, WiseCaptain, first, i, last, others, second, team; first = arguments[0], second = arguments[1], others = 4 <= arguments.length ? slice.call(arguments, 2, i = arguments.length - 1) : (i = 2, []), last = arguments[i++]; Captain = first; WiseCaptain = second; team = others; Wicketkeeper = last; console.log("Captain: " + Captain); console.log("Wise captain: " + WiseCaptain); console.log("Wicket keeper is:" + last); return console.log("Other team members: " + team); }; squad = ["Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma", "Gurkeerat Singh Mann", "Rishi Dhawan", "R Ashwin", "Ravindra Jadeja", "Axar Patel", "Jasprit Bumrah", "Umesh Yadav", "Harbhajan Singh", "Ashish Nehra", "Hardik Pandya", "Suresh Raina", "Yuvraj Singh", "Ajinkya Rahane"]; indian_team.apply(null, squad); }).call(this);
現在,再次開啟 **命令提示符** 並執行 CoffeeScript 檔案,如下所示。
c:\> coffee tailing_arguments.coffee
執行後,CoffeeScript 檔案會產生以下輸出。
Captain: Mahendra Singh Dhoni Wise captain: Virat Kohli Wicket keeper is:Ajinkya Rahane Other team members: Shikhar Dhawan,Rohit Sharma,Gurkeerat Singh Mann,Rishi Dhawan,R Ashwin,Ravindra Jadeja,Axar Patel,Jasprit Bumrah,Umesh Yadav,Harbhajan Singh,Ashish Nehra,Hardik Pandya,Suresh Raina,Yuvraj Singh
帶有展開運算子的列表推導式
在函式中,我們還可以使用列表推導式迭代展開運算子的元素,如下面的示例所示。將此程式碼儲存在名為 **splats_comprehensions.coffee** 的檔案中。
indian_team = (first, second, others...) -> Captain = first WiseCaptain = second team = others console.log "Captain: " +Captain console.log "Wise captain: " +WiseCaptain console.log "Other team members:: " console.log member for member in others squad = [ "Mahendra Singh Dhoni" "Virat Kohli" "Shikhar Dhawan" "Rohit Sharma" "Gurkeerat Singh Mann" "Rishi Dhawan" "R Ashwin" "Ravindra Jadeja" "Axar Patel" "Jasprit Bumrah" "Umesh Yadav" "Harbhajan Singh" "Ashish Nehra" "Hardik Pandya" "Suresh Raina" "Yuvraj Singh" "Ajinkya Rahane" ] indian_team squad...
開啟 **命令提示符** 並編譯 .coffee 檔案,如下所示。
c:\> coffee -c splats_comprehensions.coffee
編譯後,它會生成以下 JavaScript 程式碼。
// Generated by CoffeeScript 1.10.0 (function() { var indian_team, squad, slice = [].slice; indian_team = function() { var Captain, WiseCaptain, first, i, len, member, others, results, second, team; first = arguments[0], second = arguments[1], others = 3 <= arguments.length ? slice.call(arguments, 2) : []; Captain = first; WiseCaptain = second; team = others; console.log("Captain: " + Captain); console.log("Wise captain: " + WiseCaptain); console.log("Other team members:: "); results = []; for (i = 0, len = others.length; i < len; i++) { member = others[i]; results.push(console.log(member)); } return results; }; squad = ["Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma", "Gurkeerat Singh Mann", "Rishi Dhawan", "R Ashwin", "Ravindra Jadeja", "Axar Patel", "Jasprit Bumrah", "Umesh Yadav", "Harbhajan Singh", "Ashish Nehra", "Hardik Pandya", "Suresh Raina", "Yuvraj Singh", "Ajinkya Rahane"]; indian_team.apply(null, squad); }).call(this);
現在,再次開啟 **命令提示符** 並執行 CoffeeScript 檔案,如下所示。
c:\> coffee splats_comprehensions.coffee
執行後,CoffeeScript 檔案會產生以下輸出。
Captain: Mahendra Singh Dhoni Wise captain: Virat Kohli Other team members:: Shikhar Dhawan Rohit Sharma Gurkeerat Singh Mann Rishi Dhawan R Ashwin Ravindra Jadeja Axar Patel Jasprit Bumrah Umesh Yadav Harbhajan Singh Ashish Nehra Hardik Pandya Suresh Raina Yuvraj Singh Ajinkya Rahane