标签: scalar-context

在标量上下文中是否存在列表?

my $mind = ( 'a', 'little', 'confused' );
Run Code Online (Sandbox Code Playgroud)

这是因为perldoc perlfaq4上面的行解释如下(强调添加):

由于您正在分配标量,因此右侧是标量上下文.标量上下文中的逗号运算符(是的,它是运算符!)评估其左侧,抛出结果,并评估它的右侧并返回结果.实际上,该 列表极为相象分配给$scalar它的右值.许多人搞砸了这一点,因为他们选择了一个类似于列表的列表,其最后一个元素也是他们期望的计数:

my $scalar = ( 1, 2, 3 );  # $scalar gets 3, accidentally
Run Code Online (Sandbox Code Playgroud)

我理解这意味着在标量上下文中没有列表这样的东西.

然而,ikegami坚持认为它是"在列表运算符中的结果[s],所以它一个列表文字."

那么,它是否是一个列表?

perl list scalar-context

9
推荐指数
1
解决办法
403
查看次数

空列表可以在标量上下文中吗?

有一个谎言,标量上下文中的列表产生列表的最后一个元素.这是一个谎言,因为(俗话说)你不能在标量上下文中有一个列表.看起来像标量上下文中的列表实际上是标量上下文中的逗号运算符,它在标量上下文中具有不同的行为.

但是,在这个逻辑中似乎存在一个循环漏洞:空列表(有时称为空列表).字符()定义为空列表perldoc perlglossary.构造

my $s = ();
Run Code Online (Sandbox Code Playgroud)

是有效的代码,并返回undef$s.这似乎没有在任何地方记录perldoc(我没有检查过Camel),但是很多代码都在它上面,所以我认为它就在这里.

既然序言已经完成,那么问题是:如果我们不能在标量上下文中有一个列表,那么我们在标量上下文中将什么称为空列表,什么是不将其称为列表的理由(因为没有逗号)在标量语境中)?

如果您喜欢这个问题,您可能也喜欢P5P中正在进行讨论.

perl list scalar-context

5
推荐指数
1
解决办法
562
查看次数

如何在EF中更新导航属性/相关表?

我有一个Customer带有导航属性的对象Days(天是一个单独的表,具有-day_id,customer_id-FK)。

mycontext.Customers.ApplyCurrentValues(cust);
mycontext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这仅更新了Customer的标量属性,而不更新了几天。有什么聪明的方法可以更新Days?(无需在几天内手动迭代。)?如果不是,是否有最佳实践来更新第二张表(天)?如果可能的话,请编写明确的代码。

ps我当前正在使用EF 4.0

entity-framework entity-framework-4 sql-update scalar-context

5
推荐指数
2
解决办法
8281
查看次数

Perl"反向逗号运算符"(例如,编程Perl,第4版)

我正在阅读" 编程Perl "并遇到一个似乎没有意义的奇怪例子.本书描述了Perl中的逗号运算符如何在标量上下文中使用时仅返回最后的结果.

例:

# After this statement, $stuff = "three"
$stuff = ("one", "two", "three");
Run Code Online (Sandbox Code Playgroud)

然后,这本书在几页之后给出了这个"反向逗号运算符"的例子(第82页)

# A "reverse comma operator".
return (pop(@foo), pop(@foo))[0];
Run Code Online (Sandbox Code Playgroud)

然而对我来说,这似乎并没有反过来......?

例:

# After this statement, $stuff = "three"
$stuff = reverse_comma("one", "two", "three");

# Implementation of the "reverse comma operator"
sub reverse_comma {
    return (pop(@_), pop(@_))[0];
}
Run Code Online (Sandbox Code Playgroud)

这与正常的逗号运算符有何不同?结果是一样的,没有逆转!

这是指向确切页面的链接.这个例子靠近底部.

perl operators comma scalar-context

4
推荐指数
2
解决办法
362
查看次数

Perl中的二维数组访问

试着学习Perl.我有一个填充了城市的阵列.我想通过引用子例程传递数组并打印每个城市输出.但是我有以下问题:

1)我可以在子例程中的while循环之前访问每个元素.但我无法访问while循环中的元素.我收到错误消息:

...
Use of uninitialized value in print at <filename> line 44, <GEN2> line 997 (#1)
Use of uninitialized value in print at <filename> line 44, <GEN2> line 998 (#1)
...
Run Code Online (Sandbox Code Playgroud)

以下是代码.我评论了什么打印和什么不打印(我试图删除我的解释不需要的代码......):

@cities;

#Assume cities is loaded successfully
&loadCities(getFileHandle('cities.txt'), $NUM_CITIES, \@cities);
&printElements(getFileHandle('names.txt'), \@cities);

sub printElements{

    my $counter = 0;
    my $arraySize = scalar $_[1];

    # Prints fine!!!
    print @{$_[1][($counter)%$arraySize];

    while ((my $line = $_[0]->getline()) && $counter < 1000){

        #Doesn't print. Generates the above error
        print @{$_[1][($counter)%$arraySize];

        $counter += 1; …
Run Code Online (Sandbox Code Playgroud)

arrays perl scalar-context

3
推荐指数
1
解决办法
2162
查看次数

需要帮助从标量上下文中获取perl数组

我有一个perl数组,我需要以下列方式存储:

 $self->{spec}->{allImages} = @allImages;
Run Code Online (Sandbox Code Playgroud)

然后我需要稍后检索内容:

 print Dumper($self->{spec}->{allImages});
Run Code Online (Sandbox Code Playgroud)

这会产生:

 $VAR1 = 10;
Run Code Online (Sandbox Code Playgroud)

(数组中的项目数).

如何摆脱标量上下文并将$ self - > {spec} - > {allImages}作为列表返回?

arrays perl scalar-context

0
推荐指数
1
解决办法
66
查看次数