为什么函数参数会引发列表上下文?

我有一个函数,这取决于调用上下文,我想将此函数用作其他函数的参数。令人惊讶的是,我发现此second函数现在在列表上下文中被调用。我尝试使用强制标量上下文,+()但它没有按我预期的那样工作。因此,唯一的方法是使用隐式调用它scalar

use 5.010;

say first( 1, second( 'y' ) );
say first( 1, +( second( 'y' ) ) );
say first( 1, scalar second( 'y' ) );

sub first {
  my $x = shift;
  my $y = shift;

  return "$x + $y";
}

sub second {
  my $y = shift;

  if ( wantarray ) {
    qw/ array array /;
  } else {
    'scalar';
  }
}
__END__
1 + array
1 + array
1 + scalar

函数的参数被视为列表,但这是否意味着该列表中的每个参数也都隐含了列表上下文?如果是,那为什么呢?

并且,使用scalar作品,但是我还必须通过其他哪些方式在标量上下文中调用此函数(没有中间变量)?

池上

为什么函数参数会引发列表上下文?

子例程接受数量可变的标量作为参数。还有什么其他选择?

函数的参数被视为列表,但这是否意味着该列表中的每个参数也都隐含了列表上下文?如果是,那为什么呢?

是的。因为您希望能够从哈希和数组的内容构建列表。有100万个原因如此有用。

%h = (%h, ...);  # Add to a hash
f( $x, @opts );  # Composing argument lists
etc

使用scalar作品,但是我还必须在标量上下文中(没有中间变量)调用此函数的其他方式?

金田

say first( 1, "".second( 'y' ) );    # Side-effect: stringification
say first( 1, 0+.second( 'y' ) );    # Side-effect: numificatiion
say first( 1, !!second( 'y' ) );     # Side-effect: conversion to boolean

次常规原型也可以强制执行标量上下文,但是出于这个原因,通常认为它们是不好的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么从ServletContextListener获取上下文后,Perpared Statemt会引发NullPointerException?

为什么来自父上下文的更改会自动转到子上下文?

为什么无法识别上下文中的函数?

如果未在更新时指定所有上下文,为什么会执行所有上下文?

为什么意图需要上下文?

为什么上下文=无?

为什么只有部分上下文菜单会触发 WPF 中的关联命令?

为什么this.setModel()会根据上下文表现不同

为什么 ANTLR 生成的解析器会重用上下文对象?

为什么列表上下文中的替换不返回捕获列表?

在列表上下文中匹配不会返回空列表。为什么?

为什么在 Python 的打印函数中传递给关键字参数 end 的参数没有在下面的上下文中按预期工作?

shell 重定向上下文中的“参数列表”是什么?

为什么shift认为它在标量上下文中正在接收参数?

为什么特征不能具有上下文边界参数

为什么具有域上下文的 FindByIdentity 忽略参数中的本地机器名称?

Django 中 render() 函数的“上下文”参数有什么作用?

将unix命令输出写入Perl中的文件时,为什么需要列表上下文?

为什么将上下文传递给Intent的构造函数?

为什么在实例化函数上下文时会对其进行更改?

为什么原型中的“this”指的是全局上下文,而声明中的“this”指的是函数?

为什么在我的行上下文中使用 Early 函数时不起作用

设置上下文属性值的函数为空但有效。为什么?

Python asyncio:Queue.join()仅在未引发异常时完成,为什么?(上下文:编写异步映射功能)

为什么将int.MinValue除以-1会在未经检查的上下文中引发OverflowException?

什么是(确切地)“列表上下文”(和“字符串上下文”)?

为什么将绑定数据上下文设置为控件的数据上下文?

为什么Android使用多个上下文而每个上下文都不相同?

为什么当上下文值更新时我的上下文不更新?