命名这个python / ruby语言结构(使用数组值来满足函数参数)
这种语言结构称为什么?
在Python中,我可以说:
def a(b,c): return b+c
a(*[4,5])
并得到9.同样在Ruby中:
def a(b,c) b+c end
a(*[4,5])
当一个数组传递给一个需要多个参数的函数时,这叫做什么?
*
运算符的名称是什么?
其他什么语言支持这个很酷的功能?
Python文档称这个解包参数列表。 这是一个非常方便的功能。 在Python中,您还可以使用双星号(**)将字典(散列)解包到关键字参数中。 他们也反过来工作。 我可以定义一个像这样的函数:
def sum(*args):
result = 0
for a in args:
result += a
return result
sum(1,2)
sum(9,5,7,8)
sum(1.7,2.3,8.9,3.4)
将所有参数打包成一个任意大小的列表。
在红宝石中,它通常被称为“splat”。
同样在ruby中,你可以用它来表示'列表中的所有其他元素'。
a, *rest = [1,2,3,4,5,6]
a # => 1
rest # => [2, 3, 4, 5, 6]
它也可以出现在赋值运算符的任一侧:
a = d, *e
在这个用法中,它有点像计划的cdr,尽管它不一定只是列表的头部。
这个典型的术语称为“将函数应用于列表”,或者简称为“应用”。
请参阅http://en.wikipedia.org/wiki/Apply
自1960年以来,它一直处于LISP的初始阶段。 高兴的Python重新发现它: - }
应用通常位于列表或列表的表示上,如数组。 但是,可以将函数应用于来自其他方面的参数,例如结构体。 我们的PARLANSE语言有固定的类型(int,float,string,...)和结构。 奇怪的是,函数参数列表看起来很像结构定义,而在PARLANSE中,它是一个结构定义,您可以将PARLANSE函数“应用”到兼容的结构。 你也可以“制造”结构实例,因此:
(define S (structure [t integer] [f float] [b (array boolean 1 3)] )structure )define s (= A (array boolean 1 3 ~f ~F ~f)) (= s (make S -3 19.2 (make (array boolean 1 3) ~f ~t ~f)) (define foo (function string S) ...) (foo +17 3e-2 A) ; standard function call (foo s) ; here's the "apply"
PARLANSE看起来像lisp,但不是。
链接地址: http://www.djcxy.com/p/9075.html上一篇: Name this python/ruby language construct (using array values to satisfy function parameters)