2013-10-10 46 views
1

我需要從1交換的最後一位在$name 2或2:1木偶regsubst多重替換

在Ruby(IRB)我有它的工作是這樣

irb(main):038:0> name = "drdev-ams-1" 
irb(main):059:0> name = name.sub(/[12]$/, '1' => 2, '2' => 1) 
=> "drdev-ams-2" 
irb(main):060:0> name = name.sub(/[12]$/, '1' => 2, '2' => 1) 
=> "my_string-1" 

是怎樣的在傀儡2.7中取得同樣成績?

regsubst($name, '[12]$', "'1' => 2, '2' => 1") 

這並沒有給出正確的結果。

回答

0

在Ruby此代碼

{ '1' => 2, '2' => 1 } 

限定hash,在你的情況下,使用由子方法來代替任何搜索結果等於該散列的與該鍵的值的鍵中的一個。在Ruby中,當哈希是函數調用的最後一個參數時,可以省略大括號。下面的兩個調用是等價的:

name.sub(/[12]$/, '1' => 2, '2' => 1) 
name.sub(/[12]$/, { '1' => 2, '2' => 1 }) 

木偶都有自己的hashes語法,這是幾乎一樣Ruby的語法並不奇怪。你應該注意到一些細微的差異。

首先你已經把雙引號放在你的散列表中。這意味着Puppet解析器將產生一個字符串而不是散列。另外,即使哈希是函數調用的最後一個參數,Puppet也需要大括號。最後,Puppet並不需要引用散列鍵(儘管提供它們並不重要)。然而,這反過來也不起作用:在Ruby { hello => 'world' }中產生了一個解析錯誤,而Puppet解析器理解得很好。

配備兩個散列您的木偶代碼只需要之間的瞭解一些調整:

regsubst($name, '[12]$', { '1' => 2, '2' => 1 }) 

這是這部作品證明:

$x1 = "drdev-ams-1" 
$x2 = "drdev-ams-2" 
alert("x1 = ${x1}") 
alert("x2 = ${x2}") 
$y1 = regsubst($x1, '[12]$', { '1' => 2, '2' => 1 }) 
$y2 = regsubst($x2, '[12]$', { '1' => 2, '2' => 1 }) 
alert("y1 = ${y1}") 
alert("y2 = ${y2}") 

產生以下輸出:

Alert: Scope(Class[main]): x1 = drdev-ams-1 
Alert: Scope(Class[main]): x2 = drdev-ams-2 
Alert: Scope(Class[main]): y1 = drdev-ams-2 
Alert: Scope(Class[main]): y2 = drdev-ams-1 

希望這會有所幫助。

我來自阿姆斯特丹的方式。

+0

非常感謝你的解釋。正是我需要的。 – SKtron