gpt4 book ai didi

perl - 具有一个元素的文字列表如何在 perl 中明确表示?

转载 作者:行者123 更新时间:2023-12-04 18:40:16 25 4
gpt4 key购买 nike

我需要一个函数来返回一个列表,该列表作为唯一的输入列表使用到 map BLOCK LIST .我写了 return (6);因为我想回来具有一个元素的列表 ,但这看起来与 相同括在括号中的标量 .会按照我想要的方式解释吗?我需要使用丑陋的东西,例如:return @{[6]};强制执行我的意图?

最佳答案

这里没有歧义,您不能无条件返回列表。

在 Perl 5 中,每个表达式,包括子程序调用,都有一个上下文,它是列表上下文(返回零个或多个值)或标量上下文(只返回一个值)。一个 return语句将子例程调用的上下文传播到 return 中的表达式。陈述。假设您试图返回一个包含多个元素的列表:

return (6, 7, 8);

这不能保证是一个列表。如果在标量上下文中调用 sub,则 return 中的逗号表达式语句也在标量上下文中,标量上下文中逗号表达式的行为是返回最右边的值,这里是 8 .

如果您改为使用临时数组,
return @{[6, 7, 8]}

那么如果在标量上下文中调用它,您将获得标量上下文中数组的行为,即返回数组中元素的数量。

以上所有内容都适用于单元素列表,就像示例中的三元素列表一样。

一些一般事实:
  • 没有办法强行返回一个列表——你只能返回调用者要求的内容。
  • 如果在标量上下文中调用一个 list-y 对象会发生什么,没有系统的选择——列表中将在列表上下文中返回的元素数量是一个常见的选择,但不是普遍的。
  • 如果你想要一个明确指定的子程序,你不能说“它总是返回一个列表”;您必须指定需要返回标量时会发生什么。 (如果您愿意,您可以决定它总是 die 。)
  • 如果你想根据调用是在标量上下文还是列表上下文中做出明确的选择,你可以使用命名不佳的内置函数 wantarray ,如果在列表上下文中调用子例程,则返回 true。

  • 这是最接近您所要求的实际存在的东西。请注意,没有括号——括号不影响上下文。
    die "can't be scalar" unless wantarray;
    return 6;

    关于perl - 具有一个元素的文字列表如何在 perl 中明确表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688312/

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