2016-03-30 14 views
0

Wie die Zeichenfolge in Ruby-Code in zwei Zeilen aufgeteilt werden? Gibt es ein bestimmtes Symbol?Wie die Zeichenfolge in Rubin-Syntax in zwei Zeilen aufgeteilt wird

def my_def 
    path = "//div/p[contains(., 'This is a veeeeeeeryyyyyy looooonggggg string')]" 
end 

Ich wünsche, so etwas zu machen:

def my_def 
    path = "//div/p[contains(., 'This is a veeeeeeeryyyyyy 
      looooonggggg string')]" 
end 

enter image description here Zurück Schrägstriche rechts funktioniert nicht!

+0

hatte Mühe, diese in Pry tun. Versuchen Sie dies in einem einfachen Texteditor und führen Sie es von der Konsole aus. – JLB

+0

Bitte verwenden Sie keine Bilder, um uns wichtige Informationen in einer Frage zu zeigen. Wir können die Informationen nicht kopieren und einfügen, noch können Suchmaschinen sie indizieren, um anderen bei der Suche nach Ihrer Frage zu helfen. Plus-Links verrotten und brechen. Kopieren Sie stattdessen die Informationen in Ihre Frage. –

Antwort

3

Ruby automatisch zwei Strings verketten, die benachbart sind:

foo = 'a' 'b' 
foo # => "ab" 

Normalerweise wird ein Zeilenende bedeutet das Ende der Zuordnung:

foo = 'a' 
     'b' 
foo # => "a" 

so kann man nicht einfach die Linien brechen und erwarte Ruby herauszufinden, was zu tun ist.

\ markiert die Zeile als Fortsetzung, so könnten Sie:

foo = "a" \ 
     "b" 
foo # => "ab" 

Oder setzen auf die + String-Verkettung:

foo = 'a' + 
     'b' 
foo # => "ab" 

ich wahrscheinlich die + benutzen würde, da es am häufigsten ist verwendet, um Strings bereits zu verbinden, so ist seine Bedeutung sehr offensichtlich. Die Verwendung von \ führt dazu, dass Leute wirklich langen Ausdrücken beitreten, anstatt sie zu unterbrechen.

Wenn die Saiten sind wirklich lang, können Sie einige andere Tricks:

foo = [ 
    'foo', 
    'bar' 
].join 
foo # => "foobar" 

Wenn Sie die Saiten mit einem Raum, wie rekombinieren Sätze anschließen möchten:

foo = [ 
    'foo', 
    'bar' 
].join(' ') 
foo # => "foo bar" 

oder:

foo = [ 
    'foo', 
    'bar' 
] * ' ' 
foo # => "foo bar" 

Aufbauend auf all das würde ich verwenden eine Kombination der oben oder einfach so etwas wie:

long_str = 'This is a veeeeeeeryyyyyy' + 
      ' looooonggggg string' 
path = "//div/p[contains(., '#{ long_str }')]" 

oder:

long_str = [ 
    'This is a veeeeeeeryyyyyy', 
    'looooonggggg string' 
].join(' ') 
path = "//div/p[contains(., '%s')]" % long_str 
3

Sie können einen umgekehrten Schrägstrich verwenden, um die Zeichenfolge, um anzuzeigen, weiter auf der nächsten Zeile, etwa so:

str = "this is a long \ 
string" 

print str # => this is a long string 

Wenn Ihre String Art und Weise zu groß wird, könnte es eine gute Idee sein, anstatt hier docs zu verwenden. Sie ermöglichen es, Textstücke in der Mitte des Code zu schreiben:

str = <<HEREDOC 
This is my string :) 
Let's imbue code in the imbued doc: #{[4, 2, 3, 1].sort} 
HEREDOC 

print str 
# => This is my string :) 
# => Let's imbue code in the imbued doc: [1, 2, 3, 4] 

HEREDOC kann jeder Name, den Sie es geben wollen. Sie können mehr über here docs here erfahren.

+0

Zurück Schrägstriche funktioniert nicht wie ich es erwartet hatte! Als Beispiel habe ich ein Bild für dich angehängt. – andgursky

+0

@andgursky Haben Sie versucht, den Code mit den umgekehrten Schrägstrichen auszuführen? Das Bild, das Sie angezeigt haben, sieht wie ein Fehler im Programm zur Hervorhebung aus, aber das Programm sollte gut laufen. – SlySherZ

Verwandte Themen