【发布时间】:2021-01-11 00:49:11
【问题描述】:
我想将默认字符串传递给函数,并在函数中而不是在调用站点对其进行“字符串插值”。
例如,
def isBetween(a:Int, b:Int,
msg: String = s"${v} is not between ${a} and ${b}."
)(v:Int):Either[String, Boolean] = {
if (a <= v && v <= b) Right(true) else Left(msg)
}
这不会编译,因为当编译器想要进行插值时,a、b 和肯定不是v 都不在范围内。
目标是提供默认错误字符串,但允许用户在必要时更改它。例如:
val normalBetween = isBetween(0, 100)
val customBetween = isBetween(0, 100, s"Doofus! it's gotta be ${a} <= v <= ${b} but v is ${v}!")
val result1 = normalBetween(101) // Left("101 is not between 0 and 100.")
val result2 = customBetween(101) // Left("Doofus! it's gotta be 0 <= v <= 100 but v is 101!")
我试着让msg pass-by-name;不走运。
我想我想从 Python 世界中得到这样的东西:
name = 'world'
program ='python'
print('Hello {name}!This is{program}.'.format(name=name, program=program))
有什么建议吗?
【问题讨论】:
-
好吧,你完全可以这样做,格式化字符串而不是使用插值器。
-
我考虑过格式字符串(应该说),但被占位符可能更改的顺序难住了。 @tomer-shetah 提供了一种我不熟悉的方法。 stackoverflow.com/questions/26824690/… 提供另一个。
标签: string scala string-interpolation