2014-03-07 52 views
1

在Scala 2.10中存在StringContext。有了這個,你可以做一些事情臨客此:將字符串轉換爲StringContext以評估延遲

val x = 10 
val y = s"Using $x within this String." 

現在是y == "Using 10 within this String."

但我想申請「S」推遲預定義的字符串。我想要做這樣的事情:

val str = "Using $x within this String." 
def foo(arg: String) = { 
    // do stuff 
    val x = 11 
    s"$arg" // enable the arg-String to use the context 
} 

現在應該foo(str) == "Using 11 within this String."

是否有可能實現這樣的事情?

回答

3

你可以使用的方法,而不是val的這個:

def str(x: Int) = s"Using $x within this String." 

str(11) 

編輯:

身邊跑過尚未插入串並填寫參數的其他地方是不可能的。插值發生在編譯時,所以變量必須在字符串定義的範圍內。

+0

我想繞過例如作爲演員之間的消息。 – Themerius

+1

你的意思是傳遞未插入的字符串並在接收演員中填充參數?這是不可能的。插值發生在編譯時,所以變量必須在字符串定義的範圍內。 – drexin

+0

好的,這就是我想知道的。謝謝!那我最好使用一個外部的模板引擎。 – Themerius