gpt4 book ai didi

arrays - 是否将数组转换为字符串 "special"以及其他类型?

转载 作者:行者123 更新时间:2023-12-02 09:04:20 25 4
gpt4 key购买 nike

在此代码中,我将整数数组 arr 转换为几种不同的类型。当转换为 real 时,结果是通过将每个元素转换为 real 获得的数组。对于复杂也会发生同样的情况。但是,如果我将 arr 转换为 string,结果将成为 string 的标量变量。这让我有点惊讶,因为我最初期望的是一个字符串数组......

var arr = [1,2,3];
writeln( arr );
writeln( arr.type:string );

var r = arr : real;
writeln( r );
writeln( r.type:string );

var z = arr : complex;
writeln( z );
writeln( z.type:string );

var s = arr : string;
writeln( s );
writeln( s.type:string );

(chpl-1.20 的结果)

1.0 2.0 3.0
[domain(1,int(64),false)] real(64)
1.0 + 0.0i 2.0 + 0.0i 3.0 + 0.0i
[domain(1,int(64),false)] complex(128)
1 2 3
string

但是,由于 I/O 中使用了字符串(例如 writeln(arr)),我猜想在其他类型中,转换为字符串可能是“异常(exception)”或“特殊”。如果是这样,如果 T 不是 string,那么假设 arr : T 总是给出元素类型 T 的新数组是否合理 以及每个元素到 T 的转换是否可用?

最佳答案

我认为你的假设是正确的。当数组转换为 string 类型时,会生成单个字符串值,因为 (a) 可以将数组表示为字符串,(b) 支持该转换,以及 (c) 正如您所注意到的,我们需要这种能力来处理 I/O 之类的事情。大多数类型都是如此,因此在这种情况下“获胜”的规则是“任意类型的表达式通常支持在 Chapel 中转换为字符串。”

相反,当int数组转换为real(比如说)时,没有定义从数组到实数的转换。但是,定义了从 intreal 的强制转换,因此 Chapel 的数组提升规则生效,并且强制转换会并行应用于每个数组元素。实际上,表达式 arr: real 被重写为 [e in arr] e: real

这还建议了一种方法,如果您想要特定情况下的字符串结果数组:迭代数组,将每个元素转换为字符串( TIO ):

var arr = [1,2,3];
writeln( arr );
writeln( arr.type:string );

var s = [e in arr] e:string;
writeln( s );
writeln( s.type:string );

(这种形式应该统一适用于元素类型上的任何合法转换,它只是比提升启用的速记多了一点打字;但在通用设置中,这可能是合适的)。

关于arrays - 是否将数组转换为字符串 "special"以及其他类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59902083/

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