2017-10-19 4 views
0

Je vais par http://rubykoans.com/Essayer de comprendre l'opérateur de pelle avec des cordes

Dans le koan/about_strings.rb: 100 fichier

def test_the_shovel_operator_modifies_the_original_string 
    original_string = "Hello, " 
    hi = original_string 
    there = "World" 
    hi << there 
    assert_equal "Hello, World", original_string 

    # THINK ABOUT IT: 
    # 
    # Ruby programmers tend to favor the shovel operator (<<) over the 
    # plus equals operator (+=) when building up strings. Why? 
    end 

Ce passe, bien que je pense original_string égalerait "Bonjour", et que salut serait égal "Bonjour, monde"

J'ai vu cette affiche avait une question similaire, mais pas tout à fait:

Why is the shovel operator (<<) preferred over plus-equals (+=) when building a string in Ruby?

Que manque-t-il?

+1

Qui a inventé le terme "opérateur de pelle"? – Stefan

+0

Je ne suis pas sûr d'avoir déjà vu l'opérateur de la pelle utilisé pour concaténer les cordes. Certaines techniques plus courantes seraient '" # {hi} # {there} "' ou '[hi, there] .join'. – moveson

+0

Regardez à nouveau la ligne 3: à la ligne 3, vous * dites à * Ruby de * les * faire pareil! Par conséquent, ils * sont * identiques. –

Répondre

1

Lorsque vous définissez hi = original_string votre variable hi est juste une nouvelle variable pointant sur le même objet. Si vous regardez hi.object_id et original_string.object_id vous constaterez qu'ils sont identiques. Si vous voulez un clone d'un objet que vous pouvez manipuler sans affecter le original_string, vous devrez dire quelque chose comme hi = original_string.clone ou hi = original_string.dup.