之间有什么区别的标和列表的情况下在Perl并不会有任何平行的其他语言,例如Java或Javascript?

有帮助吗?

解决方案

各个运营商在Perl别方面敏感,并产生不同的结果在名单,并标上下文。

例如:

my(@array) = (1, 2, 4, 8, 16);
my($first) = @array;
my(@copy1) = @array;
my @copy2  = @array;
my $count  = @array;

print "array: @array\n";
print "first: $first\n";
print "copy1: @copy1\n";
print "copy2: @copy2\n";
print "count: $count\n";

输出:

array: 1 2 4 8 16
first: 1
copy1: 1 2 4 8 16
copy2: 1 2 4 8 16
count: 5

现在:

  • $first 包含1(第元件阵列),因为括号中的 my($first) 提供一系列方面,但是,只有空间用于一个值 $first.
  • @copy1@copy2 包含一个副本 @array,
  • $count 包含5,因为它是一个标方面,和 @array 评估的要素数中列在一个标上下文。

更详细的实例可以构成过(结果是一个行使读者):

my($item1, $item2, @rest) = @array;
my(@copy3, @copy4) = @array, @array;

没有直接的并行列,并标上下文在其他语言,我知道的。

其他提示

标量环境中你会得到什么,当你正在寻找一个单一的价值。列表环境中你会得到什么,当你正在寻找多个值。其中最常见的地方看到的区别使用数组时:

@x = @array;  # copy an array
$x = @array;  # get the number of elements in an array

其他运算符和函数是上下文相关的,以及:

$x   = 'abc' =~ /(\w+)/;  # $x = 1
($x) = 'abc' =~ /(\w+)/;  # $x = 'abc'
@x   = localtime();       # (seconds, minutes, hours...)
$x   = localtime();       # 'Thu Dec 18 10:02:17 2008'

如何操作者(或功能)在给定的上下文中的行为是向上给操作者。有对事情应该如何表现没有一般规则。

您可以使自己的子程序上下文敏感的使用wantarray函数来确定调用上下文。可以强制表达式来在标量上下文通过使用scalar关键字进行评价。

除了标量和列表上下文你还会看到“无效”(没有返回值预期)和“布尔”(一真/假值预计)在文件中提到的环境。

这只是意味着一种数据类型将根据操作模式进行评估。例如,分配到一个标量装置右侧将作为标量来评价。

我觉得理解上下文的最好办法就是学习wantarray。这样想象=是实现wantarray子程序:

sub = {
  return if ( ! defined wantarray ); # void: just return (doesn't make sense for =)
  return @_ if ( wantarray ); # list: return the array
  return $#_ + 1; # scalar: return the count of the @_
}

的示例此帖子工作仿佛上述子程序通过使右侧作为参数调用。

至于其他语言的相似之处,是的,我仍然认为,几乎所有的语言支持类似的东西。多态性是所有面向对象的语言类似。另一个例子,Java的对象转换为字符串在某些情况下。我已经使用的每一个无类型的脚本语言有类似的概念。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top