我用以下代码得到一个奇怪的错误.
我有一个Example带有伴侣对象的类,我在其中定义了一个字符串SIGN.在类Example我有一个方法,我创建一个正则表达式,我使用字符串插值,以便我可以SIGN用来构建我的正则表达式.
这编译,但我在运行时遇到一个奇怪的错误.这是Scala的错误吗?我正在使用Scala 2.10.3(在Windows 7上).
scala> :paste
// Entering paste mode (ctrl-D to finish)
class Example {
import Example._
def regex = s"""$SIGN?\d+""".r
}
object Example {
private val SIGN = """(\+|-)"""
}
// Exiting paste mode, now interpreting.
defined class Example
defined module Example
scala> val e = new Example
e: Example = Example@77c957d9
scala> e.regex
scala.StringContext$InvalidEscapeException: invalid escape character at index 1 in "?\d+"
at scala.StringContext$.treatEscapes(StringContext.scala:229)
at scala.StringContext$$anonfun$s$1.apply(StringContext.scala:90)
at scala.StringContext$$anonfun$s$1.apply(StringContext.scala:90) …Run Code Online (Sandbox Code Playgroud) EDITED
我必须使用字典中的值格式化字符串,但字符串已包含大括号.例如:
raw_string = """
DATABASE = {
'name': '{DB_NAME}'
}
"""
Run Code Online (Sandbox Code Playgroud)
但是,当然,raw_string.format(my_dictionary)KeyErro的结果.
有没有办法使用不同的符号.format()?
这不是重复的如何在python字符串中打印文字大括号字符并在其上使用.format?因为我需要保持大括号,并使用不同的分隔符.format.
我有一些嵌套的case类,对于特定的序列化机制,我需要提供一个productPrefix包含$字符的内容.像这样
object Foo {
case class Bar() {
override def productPrefix = "Foo$Bar"
}
}
Run Code Online (Sandbox Code Playgroud)
现在我收到一个编译器警告:
Run Code Online (Sandbox Code Playgroud)Warning:(53, 42) possible missing interpolator: detected interpolated identifier `$Bar` override def productPrefix: String = "Foo$Bar"
有没有办法禁用警告,如果可能的话只有这个实例?Scala版本是2.11.8.
编辑:我以为我很聪明:"Foo\u0024Bar".但编译器甚至警告过这一点.另一种解决方案是classOf[Bar].getName,在没有其他外部对象的约束下.
在这种情况下,字符串插值工作正常:
val name = "Bill"
val result = s"My Name is ${name}"
Run Code Online (Sandbox Code Playgroud)
当我将它引入变量时,它没有获得插值:
val name = "Bill"
val greeting = "My Name is ${name}"
val result = s"${greeting}"
Run Code Online (Sandbox Code Playgroud)
直接包装greeting不是合适的解决方案,我必须像普通字符串一样处理问候语。
我开始写一条消息,但不知道是否需要插入它。所以,我在消息的中间,想要插入一个$来插入我的字符串。
如果存在一些快捷方式,将会很有帮助。
像这样:
Log("Something happen here, at... (Oh God, I will need interpolate it..) {DateTime.Now}...");
Run Code Online (Sandbox Code Playgroud)
有吗?
我一直在尝试将数组减少为字符串以用于字符串插值。
例如。
input = ["123", "456"]
expected output = array=123,456
Run Code Online (Sandbox Code Playgroud)
这是我的尝试
$ echo '["123", "456"]' | jq 'array=\(.|join(","))'
jq: error: syntax error, unexpected INVALID_CHARACTER (Unix shell quoting issues?) at <top-level>, line 1:
array=\(.|join(","))
jq: 1 compile error
Run Code Online (Sandbox Code Playgroud) https://dart.dev/guides/language/ effective-dart/usage#avoid-using-curly-braces-in-interpolation-when-not-needed effective-dart/usage#avoid-using-curly-braces-in-interpolation-when-not-needed表示在不需要时避免在插值中使用花括号。如果您\xe2\x80\x99 插入一个简单标识符,后面没有紧跟着更多字母数字文本,则应省略 {}。
\n\n除了不需要进行插值之外,这样做还有什么问题吗?
\n\n指南说这很好:
\n\n\'Hi, $name!\'\n "Wear your wildest $decade\'s outfit."\n \'Wear your wildest ${decade}s outfit.\'\nRun Code Online (Sandbox Code Playgroud)\n\n指南说这很糟糕:
\n\n\'Hi, ${name}!\'\n "Wear your wildest ${decade}\'s outfit."\nRun Code Online (Sandbox Code Playgroud)\n 对不起,如果这在某处记录,但我一直无法找到它。将大括号定界符与 一起使用时qq,不会插入代码:
qq.raku
#!/usr/bin/env raku
say qq{"Two plus two": { 2 + 2 }};
say qq["Two plus two": { 2 + 2 }];
Run Code Online (Sandbox Code Playgroud)
$ ./qq.raku
"Two plus two": { 2 + 2 }
"Two plus two": 4
Run Code Online (Sandbox Code Playgroud)
显然,这没什么大不了的,因为我可以使用一组不同的分隔符,但我遇到了它并想我会问。
正如@raiph 指出的那样,我忘了提出实际问题:这是它应该工作的方式吗?
在Blazor框架中,可以用HTML标签进行字符串插值吗?例如,我想运行一个循环,使用不同的颜色打印一个句子,但这似乎不起作用(因为它似乎不是正确的方法)。
@page "/HJS"
<h3>HateJS</h3>
<div>
@foreach(string colorX in colors)
{
<p style=$"color:{colorX}">@hateJS</p>
}
</div>
@code {
private string hateJS = "I hate JS";
private string[] colors = { "blue", "red" };
}
Run Code Online (Sandbox Code Playgroud)
如果这不是正确/适当的方法,那么它是什么?
我在我的记录器方法中发现升级到 .NET 6 时出现问题LogErrorInterpolatedStringHandler。
这是经典的方法:
public static void Log(string message, params object[] pars)
{
// Log message
}
Run Code Online (Sandbox Code Playgroud)
这是升级后的:
public static void Log(ref LogErrorInterpolatedStringHandler message, params object[] pars)
{
// Log message
}
Run Code Online (Sandbox Code Playgroud)
我升级了该方法,以获得此处描述的 C# 10 和 .NET 6 的性能改进。
该方法的新版本运行良好,除非dynamic在插值字符串中传递对象时。
这是一个例子:
// Works well
Logger.Log($"Log: {stringOrEverythingElseObject}");
// Exception
Logger.Log($"Log: {dynamicObject}");
Run Code Online (Sandbox Code Playgroud)
抛出的异常是
通用类型“<>A{00000004}`3”在程序集“MyAssembly,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”中使用了无效实例化。
我发现了一个与我的问题类似的拉取请求,但无法理解如何在我的代码中修复。
你有什么主意吗?谢谢!