Need

2017-05-16 5 views
1

Ich habe ein Rezept an die neue Ruby 1.9 Hash-Syntax, Refactoring, die den folgenden Code hat, der einen Fussel Test versagt:Need

service 'apache' do 
    supports :status => true, :restart => true, :reload => true 
end 

es mit dem Fehler fehlschlägt:

Use the new Ruby 1.9 hash syntax. 
    supports :status => true, :restart => true, :reload => true 

Nicht sicher, wie die neue syntax aussieht ... kann mir bitte jemand helfen?

Antwort

3

In der Ruby-Version 1.9 wurde eine neue Syntax für Hash-Literale eingeführt, deren Schlüssel Symbole sind. Hashes verwenden, um die „Hash-Rakete“ Bediener den Schlüssel und den Wert zu trennen:

a_hash = { :a_key => 'a_value' } 

In Ruby 1.9 diese Syntax ist gültig, aber immer dann, wenn der Schlüssel ein Symbol ist, es ist auch möglich, es so zu schreiben:

a_hash = { a_key: 'a_value' } 

Und als der Führer Ruby-Stil sagt, sollten Sie es vorziehen, die Ruby 1.9 Hash Literalsyntax wenn Ihre Hash-Schlüssel Symbole (see) sind zu verwenden:

# bad 
hash = { :one => 1, :two => 2, :three => 3 } 

# good 
hash = { one: 1, two: 2, three: 3 } 

Und als zusätzliches Tipp: Mischen Sie die Hash-Syntax von Ruby 1.9 nicht mit Hash-Raketen im selben Hash-Literal. Wenn Sie Schlüssel haben, die nicht Symbole halten Sie sich an die Hash-Raketen Syntax (see):

# bad 
{ a: 1, 'b' => 2 } 

# good 
{ :a => 1, 'b' => 2 } 

So können Sie versuchen, mit:

service 'apache' do 
    supports status: true, restart: true, reload: true 
end 

Wenn Sie sehen wollen, was die Rubocop „Weg“ ist Sie kann dies in der Befehlszeile ausführen, wird dies Ihren Code nur für die HashSyntax Warnungen oder Flags:

rubocop --only HashSyntax --auto-correct 
automatisch Autokorrektur
0
service 'apache' do 
    supports status: true, restart: true, reload: true 
end 

Sie können diese neue Syntax verwenden, wenn Sie Symbole als Schlüssel haben.