命名这个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)

下一篇: Passing function arguments directly to cls()