回答
那麼,Perl或梅森?我不認識梅森,所以我會回答一下Perl。
« =
»是賦值運算符。
$test = 'test'; # $test now contains the 4-char string "test".
« =>
»是« ,
»即自動引用其左側看中版本。以下都是等價的:
print "a", "b";
print "a" => "b";
print a => "b"; # Auto-quoting in effect
無論有什麼用實例,儘管當它的使用Perl會自動實例化一個包變量。這通常是一個壞主意,並被use strict;
禁用。 (始終使用use strict; use warnings;
!)
運營商記錄在perlop。
Mason是爲那些誰不知道一個Perl框架...
的=
是一個Perl的賦值操作符。對於,
運營商,=>
爲syntactic sugar。它主要用於散列,以幫助將關鍵與價值聯繫起來。以下三個equivelent:
my %hash = ("red", "apple", "yellow", "lemon", "green", "lime");
my %hash = (red => "apple", yellow => "lemon", green => "lime");
my %hash = ("red", apple => "yellow", lemon => "green", "lime");
第一個看起來像它可能只是一個列表。我必須密切關注它的
%hash
而不是@hash
。此外,如果我有100個關鍵值對,而不是其中的3個,則可能會開始失去跟蹤哪些是關鍵值,哪些是值。第二個非常清楚的是
red
是關鍵值apple
,那yellow
的關鍵是lemon
等還要注意,我不再需要大約只要我的鑰匙遵循的Perl我的鑰匙報價變量名稱約定(儘管它們可以在前面包含一個或兩個破折號)。第三個是隻是爲了攪亂你的想法。並告訴你,
=>
是只是句法糖,並沒有必要鏈接之前發生的事情。對Perl來說,它只是一個列表分隔符。你的大腦是形成這個聯繫的那個。
你看用在像這樣調用函數=>
:
my_function(
-bar => $bar_value,
-fubar => $fu_value,
-futz => $futz_value,
);
這是一個名爲myFunction
功能,需要一個密鑰組值作爲參數。我可以這樣做太:
my_function("-bar", "$bar_value", "-fubar", $fu_value, "-futz", "$futz_value");
然而,這個函數是這樣的:
sub my_function {
my %params = @_;
所以,它使用哈希爲它的參數,而不是僅僅是一個列表。當參數的順序可能會因爲時間過長而變得令人困惑時,或者函數使用的許多參數是可選的,函數往往會使用散列。設想一個可能需要用戶ID和密碼的功能,但不一定需要一個。
您可以在任何情況下使用=>
而不是逗號。例如,在Perl的最新款式是不使用括號函數參數:
chomp $foo;
比清潔:
chomp($foo);
但是,這有時難以閱讀時你的函數有多個參數:
join ", ", @foo;
我有時會使用=>
在這些情況下,以取代命令:
join ", " => @foo;
現在,我可以看到「,」和@foo
都是join
函數的參數。小心,否則它會咬你:
my @array = (join ", " => @foo, @bar);
是一樣的:
my @array = (join ", ", @foo, @bar);
或
my @array = (join (", ", @foo, @bar));
,而不是:
my @array = (join (", ", @foo) , @bar);
只是因爲我僅在之間使用和@foo
並不意味着@bar
不是參數的一部分!
你暗示但沒有明確說明'=>'糖還包括自動引用左操作數。 –
我在第二個項目符號中聲明:_注意,我不再需要引號圍繞我的鍵,只要我的鍵遵循Perl變量名稱約定(儘管它們可以在前面包含一個或兩個破折號)。在附近,我意識到雙重破折號不起作用。 –
David的回答是關於Perl賦值運算符=
和,
運算符的語法糖的一個很好的答案。但是,如果您使用HTML :: Mason,那麼=>
運算符也可以具有其他含義。
梅森組件可以從外部源(HTTP請求)或內部源(一個組件調用另一個組件)獲取各種參數,並通過<%args>
聲明參數的名稱和數據類型塊:
<%args>
$width
$admin => 0 # A default value
@items => (1, 2, 'something else')
%pairs => (key1 => 1, key2 => 'value')
</%args>
這裏的=>
運算符用於指定默認值。而一個組件可以調用使用例如符號標籤的另一個組件,無需任何參數:
<& menu &>
或使用=>
負責人確定一些參數:
<& menu, width => 640, admin => 1 &>
你可以看看組件Mason Book的章節。
在Mason2(簡稱梅森)的<%args>
塊就沒了,你仍然可以調用使用<& &>
標籤組件,但申報的屬性,你必須使用穆斯「有」語法<%class>
段內:
<%class>
has 'foo';
has 'bar' => (required => 1);
has 'baz' => (isa => 'Int', default => 17);
</%class>
這裏有一些參考:Mason::Manual::Components。
- 1. Linux命令shell中「命令> log.txt」和「命令1>&log.txt」之間的區別?
- 2. Shell:eval和ksh命令之間的區別
- 3. mvn和mvn3命令之間的區別
- 4. qdel和kill命令之間的區別
- 5. Perl之間的區別<FH>和<$FH>
- 6. adb「install」命令和「pm install」命令之間的區別?
- 7. >> =和concatMap之間的區別
- 8. 命令與ScriptBlock之間的區別Powershell
- 9. Vim netrw - Explore命令之間的區別?
- 10. 「(\ S +)\。」之間的區別和「(\ S +)|」在Perl
- 11. perl 5.8和5.10之間的區別
- 12. $ @和$之間的區別! in perl
- 13. 「%>」和「 - %>」之間有什麼區別?
- 14. Perl中「>>」和「>」的區別
- 15. GNU和zsh時間命令之間的區別
- 16. <stdafx.h>和「stdafx.h」之間的區別
- 17. python:!=和<>之間的區別?
- 18. 「 - >」和「。」之間的區別用C
- 19. 在PHP中::和 - >之間的區別?
- 20. var-> myProperty和var.myProperty之間的區別
- 21. object.variable和object-> variable之間的區別
- 22. |之間的區別和>運營商
- 23. <s:Line>和graphics.lineTo()之間的區別
- 24. 類和類之間的區別<?>
- 25. self.object和self> object之間的區別
- 26. #include <...>和#include「...」之間的區別?
- 27. Powershell:|之間的區別和>?
- 28. Scala中的>>和>>>之間的區別
- 29. Python2/3中的__new__和__init__命令之間的區別
- 30. 化石中的更新和拉命令之間的區別
這個問題是關於使用'='進行正常初始化,然後在'<%args>'內使用'=>'? –