gpt4 book ai didi

dataweave - DW 2.0 中的多态性

转载 作者:行者123 更新时间:2023-12-02 16:32:41 26 4
gpt4 key购买 nike

我最近意识到在 DW 2.0 中使用类似泛型的表示法来表示多态类型。

下面的例子

%dw 2.0
output application/dw

fun id1(a) = a
fun id2(a: Any) = a
fun id3<T>(a: T) = a
var id4 = <T>(a: T) -> a
---
{
"d1": id1,
"d2": id2,
"d3": id3,
"d4": id4,
r1: id1(10),
r2: id2(10),
r3: id3(10),
r4: id4(10)
}

说明这些函数的签名和语义是相同的。

这引出了一个问题,如果有的话,这些定义之间有什么区别?你会推荐哪一个?

最后,确认我的假设,即 DW 2.0 借用了 OO 语言中的这种类似泛型的语法来支持显式多态类型。

注意:我确实使用了 application/dw 以便在从 Anypoint Studio 运行预览时查看函数的信号

TIA!

最佳答案

DataWeave 中参数多态性 最常见的用途之一是在类型系统函数中反射(reflect)它们的返回类型取决于其输入。

这有助于避免在实现相同且仅签名不同时必须为每种可能的输入类型创建专门的函数。

请注意,此功能仅在类型检查期间相关,此信息不会在运行时携带。

在你的例子中:

  • id1 将从 id1 函数的用法中推断出 a 的类型,并且还将推断返回类型,因为它们不是指定。
  • id2 将推断返回类型为 Any
  • id3id4 是一样的,返回值和a 的类型取决于你调用函数的方式。<

为了举例说明 AnyT 之间的区别,您可以尝试:

// var fails: String = id2("foo")
var ok: String = id3("foo")

由于 id2 的结果不能分配给 String 因为它是 Any,但是 id3返回一个 String 因为它被赋予一个 String 作为输入。

关于dataweave - DW 2.0 中的多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63234247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com