2009-12-12 27 views
13

我开始非常喜欢C#的??运算符。我已经习惯了这样一个事实,那就是在某些语言中有些方便的地方,它很可能也在Perl中。在C#中是否存在与空合并运算符(??)等效的Perl?

但是,我找不到?相当于Perl。有没有?

+10

它可以帮助那些熟悉Perl,而且*陌生*用C#,如果你解释什么了?运营商呢。 – pavium 2009-12-12 02:00:53

+1

@pavium:这里有关于MSDN文档的链接?运算符:http://msdn.microsoft.com/en-us/library/ms173224.aspx – 2009-12-14 12:21:23

+0

澄清什么?意味着,'$ a ?? 5'与'$ a!= null?是一样的吗? $ a:5'这意味着如果$ a不为空,则表达式的结果为$ a,否则结果为5.如果为空,则验证它是否有用,即$ a = $ a? 5'。 – Despertar 2015-01-12 19:18:20

回答

30

从5.10开始,有//运算符,如果您认为Perl中的undef的概念等同于C#中的null的概念,则它在语义上等效。

实施例A:

my $a = undef; 
my $b = $a // 5; # $b = 5; 

实施例B:

my $a = 0; 
my $b = $a // 5; # $b = 0; 
+0

是的,我会自动 感谢 – 2009-12-12 02:11:56

+3

预5.10成语只是'定义($ A)认为民主基金为NULL的相同呢? $ A:$ B',该做这项工作,并读取不够清楚。 – hobbs 2009-12-12 02:13:54

+0

霍布斯:是的,但我必须把它写2倍(这是不一样的,当它的,例如,子程序调用) – 2009-12-12 02:18:00

-4

不是我所知道的。

Perl并不是真正的空概念的大用户。它确实对变量是否未定义进行了测试。没有特殊的运营商喜欢?尽管如此,但您可以使用带有undef测试的条件?:运算符并且非常接近。

而且我也没有在perl operator list中看到任何东西。

+0

好了,你没有回答我,但由于我意识到自己的问题的网页也有一点点了,我可以只使用简单|| (我把它作为一个单独的答案) – 2009-12-12 02:01:19

+0

没有。其实我错了 – 2009-12-12 02:02:13

2

实际上,短路或运算符也将工作评价时是undef:

my $b = undef || 5; # $b = 5; 

然而,评估0时它会失败,但为true:

my $b = 0 || 5; # $b = 5; 
6

由于Adam says,Perl 5.10的有//操作者测试其左手边运营商定义的烦躁,而不是真理:

use 5.010; 

my $value = $this // $that; 

如果您正在使用Perl的早期版本,这是一个有点乱。该||将无法​​正常工作:

my $value = $this || $that; 

在这种情况下,如果$this为0或空字符串,定义这两个,你会得到$that。要解决这个问题,这个成语是使用条件运算符,所以你可以让你自己检查:

my $value = defined($this) ? $this : $that; 
0

暗示的任何数量的参数问题,所以答案意味着一个子程序:

这里你它 - 将返回一个列表的第一个定义/非空字符串值:

sub coalesce { (grep {length} @_)[0] } 
+0

我觉得没有必要为此,使用''//多次应太。 – svick 2013-01-25 16:56:55

相关问题