2010-12-06 4 views
7

Cela fonctionneproblème avec concaténation chaîne Ruby

irb(main):001:0> name = "Rohit " "Sharma" 
=> "Rohit Sharma" 

Mais cela ne

irb(main):001:0> fname = "Rohit " 
=> "Rohit " 
irb(main):002:0> lname = "Sharma" 
=> "Sharma" 
irb(main):003:0> name = fname lname 

Il donne cette erreur

NoMethodError: undefined method `fname' for main:Object 
from (irb):3 

S'il vous plaît fournir quelques suggestions. Merci d'avance.

MISE À JOUR

Après avoir obtenu les réponses que je vous ai écrit un blog post. Vérifie s'il te plaît.

Répondre

4

L'erreur est liée au fait que fname devrait être une fonction pour que cela fonctionne. Au lieu de cela, essayez

name = fname + lname 

ou même

name = "#{fname}#{lname}" 

mais où vous avez eu

name = "Rohit " "Sharma" 

il est un cas particulier, car Ruby rejoindra les deux chaînes automatiquement.

+0

Ou 'name = fname << lname' si vous connaissez les bizarreries. –

+1

@Jonas: mais cela modifie 'fname', ce qui n'est probablement pas ce que l'OP veut ... – Peter

+0

Oui, c'est le caprice. C'est plus rapide cependant. –

0

Il suffit de mettre un + inbetween eux comme

name = fname + lname 

string + string est définie pour renvoyer une nouvelle chaîne contenant les deux entrées concaténés.

2

Lorsque vous faites

name = "Rohit " "Sharma" 

Vous ne créez pas deux objets de String qui fusionnent ensuite pour créer une chaîne. Au lieu de cela, le Ruby (interpréteur/compilateur/quelquechose) regarde le code, et le fusionne avant de produire un seul objet String.

Vous pouvez faire

name = "Rohit " "Sharma" 

mais pas

first_name_plus_space = "Rohit " 
last_name = "Sharma" 
name = first_name_plus_space last_name