2010-12-06 14 views
7

Esto funcionaProblema con Ruby concatenación de cadenas

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

Pero esto no

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

lo hace da este error

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

Sírvanse proporcionar algunas sugerencias. Gracias de antemano.

ACTUALIZACIÓN

Después de conseguir las respuestas que he escrito un blog post. Por favor, míralo.

Respuesta

4

El error está relacionado con el hecho de que fname debería ser una función para que esto funcione. En su lugar, tratar

name = fname + lname 

o incluso

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

pero en el que tuvo

name = "Rohit " "Sharma" 

se trata de un caso especial, ya que Rubí se unirá a las dos cadenas automáticamente.

+0

O 'name = fnombre << lname' si conoce las peculiaridades. –

+1

@Jonas: pero esto modifica 'fname', que probablemente no es lo que OP quiere ... – Peter

+0

Sí, esa es la peculiaridad. Sin embargo, es más rápido. –

0

Sólo hay que poner un + entre medio de ellos como

name = fname + lname 

string + string se define para devolver una nueva cadena que contiene las dos entradas concatenadas.

2

Al hacer

name = "Rohit " "Sharma" 

No se crea String s dos objetos que luego se funden para crear una cadena. En cambio, el Ruby (intérprete/compilador/lo que sea) mira el código y lo fusiona antes de producir un único objeto String.

Por lo que puede hacer

name = "Rohit " "Sharma" 

pero no

first_name_plus_space = "Rohit " 
last_name = "Sharma" 
name = first_name_plus_space last_name 
Cuestiones relacionadas