我知道这obj.func1().func2()
称为方法链,但是技术术语是什么:
func1(func2(), func3());
函数的返回值用作另一个函数的参数。
obj.func1()
总是返回具有func2()
成员函数的对象。
我知道这obj.func1().func2()
称为方法链,但是技术术语是什么:
func1(func2(), func3());
函数的返回值用作另一个函数的参数。
obj.func1()
总是返回具有func2()
成员函数的对象。
Answers:
我认为这不是功能组成。函数组合是指采用两个或多个函数并将其转换为新函数,就像f . g . h
在Haskell中一样。请注意,此时未调用任何函数。
就个人而言,我将其func1(func2(), func3())
称为“嵌套函数调用”。
f(g())
要做的就是f()
使用第一个参数的表达式进行调用,因此函数调用g()
符合表达式的要求。但是,如果必须为它起一个名字,那就跟它的名字差不多。
在数学中,它称为函数合成。不过,我认为我没有听说过该术语适用于编程。这可能是因为出于某些原因在很大程度上避免了使用。当函数有副作用时,由于编译器可以在func2之前自由评估func3,因此它可能会引入奇怪的bug。调试起来更加困难,因为您无法设置断点或无法打印出中间结果,并且大多数人都很难理解。
printf("%d %d\n", strlen(a), strlen(b));
而不使用中间变量的情况并不少见。
func1(func2(func3(x)))
。或在技术上,它指的是功能本身:如果g(x) = f1(f2(f3(x)))
,则g
(不 g(x)
)是所述组合物f1
,f2
和f3
。虽然我可以看到一种可以在问题“功能组合”中称其结构的方法,但从数学意义上讲,它使我感到该术语的用法非常不寻常。
正如@Karl Bielefeldt指出的那样,它在数学中称为函数组合。
编程中没有专门的技术术语。而且我认为这是一件好事,因为它表示操作正常且正交。
编程语言中的正交性意味着您可以使用与其上下文无关的指令/操作。例如,您可以通过以下所有方式调用函数/方法,并且其行为相同...
f1()(f2(), f3());
x = y + f4();
if ( f5() && !f6() ) doSomething();
f7() = f8() + f9(); // in C++ when a function returns a reference
x = f10() ? f11(f12(f13(x))) : f14();
您可以在Wikipedia上的编程中阅读有关正交性的更多信息,对此有一个关于StackOverflow的问题。
我对术语的理解真的不好,但是几天前我刚刚读了一篇文章,它涉及术语“ 高阶函数”,这是每个Wikipedia的定义摘要:
http://en.wikipedia.org/wiki/高级订单功能
在数学和计算机科学中,高阶函数,函数形式或函数是至少执行以下一项功能的函数:
- 接受一项或多项职能
- 输出一个功能
所有其他功能均为一阶功能。在数学中,高阶函数也称为运算符或函数。微积分中的导数是一个常见示例,因为它会将一个函数映射到另一个函数。
因此,在这种情况下,由于这种情况确实将至少一个函数用作输入/参数,因此我认为它被认为是高阶函数。
func1(func2, func3)
。请注意缺少括号。
obj.func1().func2() is called method chaining
-更正:这叫做火车残骸。