2014-09-21 47 views
4

子程序中的這條線是什麼意思?

shift->{o} = $o; 

我知道平時做了什麼樣的轉變,但是在這種情況下,不知道它是用短劃線還是箭頭。

+6

'my $ self = shift @_; $ self - > {o} = $ o;' – 2014-09-21 16:43:27

回答

3

將值轉換爲hashref併爲該散列中的'o'鍵賦值。

10

內子/方法,

shift 

是短期的

shift(@_) 

一個子調用放置論點@_。方法調用的作用相同,但是在調用者的參數前面。

如果它在一個被稱爲sub的子集中,它將$o分配給第一個參數引用的散列的元素o

如果這是作爲方法調用的子集,它將$o分配給調用者引用的哈希的元素o。實際上,這設置了調用此方法的對象的屬性o

在此過程中,shift@_中刪除了引用,儘管我懷疑這可能沒有任何意義。

+1

@Borodin,首先我解釋了'shift',然後是'@ _',然後是' - >',這是沒有前向引用的唯一順序。你是否真的有建設性的批評意見?你像往常一樣拖着我嗎? – ikegami 2014-09-22 18:14:15

+0

我希望你明白,解釋一切在眼前並不能提供有用的答案。我相信你已經看到代碼中的評論減少了可讀性的代碼?取消前向引用是針對計算機,而不是針對人:你讀過「呼嘯山莊」嗎?我相信你的回答如果在派生之前解釋更大的想法,可能會更有用。 'ysth'的答案几乎是所有必要的。 – Borodin 2014-09-22 18:27:54

+0

@Boridin,我發現ysth的答案完全沒用。我不明白它是如何幫助OP的。他甚至沒有碰到片段中令人困惑的部分 – ikegami 2014-09-22 18:49:09

0

當您將值傳遞給子例程時,可以通過兩種方式獲取該值。

  1. 你可以使用班次。當傳遞一個值時。

  2. 如果你通過更多的價值。你可以通過數組獲得它...

shift - > {0}獲取傳遞參數到子例程的單個值(或)第一個值。

$ 0用於獲取程序的當前路徑。