my $mind = ( 'a', 'little', 'confused' );
Run Code Online (Sandbox Code Playgroud)
这是因为perldoc perlfaq4上面的行解释如下(强调添加):
由于您正在分配标量,因此右侧是标量上下文.标量上下文中的逗号运算符(是的,它是运算符!)评估其左侧,抛出结果,并评估它的右侧并返回结果.实际上,该 列表极为相象分配给
$scalar它的右值.许多人搞砸了这一点,因为他们选择了一个类似于列表的列表,其最后一个元素也是他们期望的计数:Run Code Online (Sandbox Code Playgroud)my $scalar = ( 1, 2, 3 ); # $scalar gets 3, accidentally
我理解这意味着在标量上下文中没有列表这样的东西.
然而,ikegami坚持认为它是"在列表运算符中的结果[s],所以它是一个列表文字."
那么,它是否是一个列表?
有一个谎言,标量上下文中的列表产生列表的最后一个元素.这是一个谎言,因为(俗话说)你不能在标量上下文中有一个列表.看起来像标量上下文中的列表实际上是标量上下文中的逗号运算符,它在标量上下文中具有不同的行为.
但是,在这个逻辑中似乎存在一个循环漏洞:空列表(有时称为空列表).字符()被定义为空列表perldoc perlglossary.构造
my $s = ();
Run Code Online (Sandbox Code Playgroud)
是有效的代码,并返回undef到$s.这似乎没有在任何地方记录perldoc(我没有检查过Camel),但是很多代码都在它上面,所以我认为它就在这里.
既然序言已经完成,那么问题是:如果我们不能在标量上下文中有一个列表,那么我们在标量上下文中将什么称为空列表,什么是不将其称为列表的理由(因为没有逗号)在标量语境中)?
我有一个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
我正在阅读" 编程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.我有一个填充了城市的阵列.我想通过引用子例程传递数组并打印每个城市输出.但是我有以下问题:
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) 我有一个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}作为列表返回?