在前面的章节中,我们已经了解了如何定义函数并调用函数并将参数传递给它.通常,我们可以将固定数量的参数传递给函数.编程时,我们可能会遇到需要将变量参数传递给这些函数的情况.在JavaScript中,我们使用对象接受函数的可变数量的参数.
CoffeeScript提供了一个名为 splats 的功能,可以将多个参数传递给函数.我们在函数中使用splats,在参数名称后放置三个点,并用 ...
表示
语法
下面给出了使用splats接受函数内多个参数的语法.
my_function = (arguments...)-> ............ ............ ............
示例
以下是使用splats接受函数内多个参数的示例.这里我们使用splats定义了一个名为 indian_team()的函数.我们称这个函数为三次,我们每次调用时都会同时传递4个玩家,6个玩家和完整的小队.由于我们在函数定义中使用了splats,因此每次调用它时它都接受可变数量的参数.将此代码保存在名为的文件中.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 argumentsconsole.log "############## Four Players ############"indian_team "Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma"#Passing 6 argumentsconsole.log "############## Six Players ############"indian_team "Mahendra Singh Dhoni", "Virat Kohli", "Shikhar Dhawan", "Rohit Sharma", "Gurkeerat Singh Mann", "Rishi Dhawan" #Passing full squadconsole.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 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 DhoniWise captain: Virat KohliOther team members: Shikhar Dhawan,Rohit Sharma############## Six Players ############Captain: Mahendra Singh DhoniWise captain: Virat KohliOther team members: Shikhar Dhawan,Rohit Sharma,Gurkeerat Singh Mann,Rishi Dhawan############## Full squad #############Captain: Mahendra Singh DhoniWise captain: Virat KohliOther 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
使用Splats调用函数
我们也可以使用splats调用函数.为此,我们必须创建一个包含我们需要传递给函数的元素的数组,并且我们必须通过传递后缀为三个点的数组来调用该函数,如下所示.
my_function values...
示例
以下是使用splats调用函数的示例.将此代码保存在名为 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: " +teamsquad = [ "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 DhoniWise captain: Virat KohliOther 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
Splats with a Tailing Argument
我们也可以将拖尾参数传递给splats.在下面给出的示例中,我们在splat之后传递了一个名为 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 DhoniWise captain: Virat KohliWicket keeper is:Ajinkya RahaneOther 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的理解
在函数中,我们还可以使用理解来迭代splat的元素,如以下示例所示.将此代码保存在名为 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 otherssquad = [ "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 DhoniWise captain: Virat KohliOther team members::Shikhar DhawanRohit SharmaGurkeerat Singh MannRishi DhawanR AshwinRavindra JadejaAxar PatelJasprit BumrahUmesh YadavHarbhajan SinghAshish NehraHardik PandyaSuresh RainaYuvraj SinghAjinkya Rahane