web-dev-qa-db-ja.com

Groovyの複数行文字列で文字列補間を使用するにはどうすればよいですか?

Groovyには、'''で定義された複数行の文字列があります。この中で、他の変数を置き換えるために補間を使用する必要があります。

私のすべての努力のために、私はそれを機能させることができません-私は何かを逃れる必要があると思いますが、私はそれを逃しています。

サンプルコードを次に示します。

def cretanFood = "Dakos" 
def mexicanFood = "Tacos"
def bestRestaurant = ''' 
${mexicanFood} & ${cretanFood}
'''
print bestRestaurant

現時点では、これは以下を出力します:

${mexicanFood} & ${cretanFood}

私は明らかに期待しています:

Tacos & Dakos 

(注-文字列を連結したくない)

26
gsaslis

Groovyでは、Javaが二重引用符で行うのとまったく同じように、単一引用符を使用して不変文字列を作成します。

Groovyで二重引用符を使用する場合、ランタイムに可変ストリングまたはGroovyストリング(略してGString)を作成する意図を示します。可変ストリングで変数補間を使用することも、通常のプレーンJavaストリングとして残すこともできます。

この動作は、複数行の文字列バージョンにまで及びます。三重の単一引用符を使用すると不変の複数行の文字列が作成され、三重の二重引用符を使用するとGroovyの文字列が作成されます。

36
aalmiray

GStringまたは'''multi-line stringを使用する代わりに、"""を使用します

def cretanFood     = "Dakos"  
def mexicanFood    = "Tacos"
def bestRestaurant = """${mexicanFood} & ${cretanFood}"""
print bestRestaurant​

'''で囲まれたGStringは、placeholder - $を解決できません。詳細は、 Groovy Documentation の見出しStringおよびString Summaryにあります。テーブルブロック。

39

三重引用符から変数を追加し、それらをコンテンツと単に連結することも良い考えかもしれません。引用符の中に複雑なコンテンツがある場合、次のようになります。

def bestRestaurant = mexicanFood + """ & """ + cretanFood

あなたのケースは非常にシンプルなので、これも同様に行う必要があります:

def bestRestaurant = mexicanFood + " & " + cretanFood
0