2010-12-06 12 views
7

Dies funktioniertProblem mit Ruby-String-Verkettung

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

Aber dies bedeutet nicht

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

es dieser Fehler

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

Bitte geben Sie einige Anregungen gibt. Vielen Dank im Voraus.

UPDATE

Nachdem die Antworten bekomme ich ein blog post geschrieben haben. Bitte schau es dir an.

Antwort

4

Der Fehler hängt damit zusammen, dass fname eine Funktion dafür sein müsste, damit dies funktioniert. Stattdessen versuchen

name = fname + lname 

oder sogar

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

aber wo hatte man

name = "Rohit " "Sharma" 

es ist ein Sonderfall, da Rubin die beiden Strings automatisch beitreten werden.

+0

Oder 'name = fname << lname', wenn Sie die Macken kennen. –

+1

@Jonas: aber das ändert 'fname', was wahrscheinlich nicht das ist, was das OP will ... – Peter

+0

Ja, das ist die Eigenart. Es ist aber schneller. –

0

Einfach ein + dazwischen sie wie

name = fname + lname 

string + string definiert ist, zusammen, um eine neue Zeichenfolge enthält, die zwei Eingänge verketteten zurückzukehren.

2

Wenn Sie

tun
name = "Rohit " "Sharma" 

Sie erstellen keine zwei String Objekte s, die dann miteinander verschmelzen eine Zeichenfolge zu erstellen. Stattdessen betrachtet der Ruby (Interpreter/Compiler/was auch immer) den Code und führt ihn zusammen, bevor er ein einzelnes String-Objekt erzeugt.

So können Sie

name = "Rohit " "Sharma" 

tun, aber nicht

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