最近我在博客上遇到了這個Perl表達式,無法抓住它的目的。
my $success = 1;
$success &&= $insert_handle->execute($first, $last, $department);
$success &&= $update_handle->execute($department);
最近我在博客上遇到了這個Perl表達式,無法抓住它的目的。
my $success = 1;
$success &&= $insert_handle->execute($first, $last, $department);
$success &&= $update_handle->execute($department);
EXPR1 &&= EXPR2;
是短期的
EXPR1 = EXPR1 && EXPR2;
(EXCE PT是EXPR1
只計算一次*)
所提供的代碼
my $success = 1;
$success &&= $insert_handle->execute($first, $last, $department);
$success &&= $update_handle->execute($department);
也被寫爲:
my $success = 0;
if ($insert_handle->execute($first, $last, $department)) {
if ($update_handle->execute($department)) {
$success = 1;
}
}
或
my $success = $insert_handle->execute($first, $last, $department)
&& $update_handle->execute($department);
* —如果EXPR1
有副作用,這很重要,如果它是一個神奇的變量或左值子元素,這很可能發生。
my $x = 3; # Prints:
print("$x\n"); # 3
sub x() :lvalue { print("x\n"); $x }
x &&= 4; # x
print("$x\n"); # 4
x = x && 5; # x x
print("$x\n"); # 5
由於&&運算符評估右操作數,並在左操作數計算結果爲true時返回結果。 –
它首先評估LHS操作數。如果它是真的,它將計算RHS操作數並將結果分配給之前由LHS返回的變量。 – ikegami
可能是: -
my $success = 1;
$success = $success && $insert_handle->execute($first, $last, $department);
$success = $success && $update_handle->execute($department);
類似: -
a += b
// is equivalent to
a = a + b
這是一個漫長的說法。
my $success =
$insert_handle->execute($first, $last, $department)
&& $update_handle->execute($department);
+1,但我認爲最初的編碼人員希望進行一連串的方法調用,並希望他們在頁面上看起來都一樣,因此是$ success的初始設置。這種方式可以在給定的第一次呼叫之前插入呼叫而不改變任何內容。實際上,OP可能只是向我們展示了第一批幾行方法調用。 –
是的,可以。儘管仍然可以像'1 && .. && .. && ...'那樣做。但是,無論如何,我試圖做的是用簡單的表達來解釋含義,而不是推薦替代品。每個編碼者都要決定他如何表達他或她自己;-) –
我嘗試了一個小腳本,用於推測$ i = 0,$ a = 1; $ a &&=$i; print「$ a:$ i」; –
總之,這是一個運行一堆步驟直到第一個失敗,然後停止的羅嗦方法。 –