我有以下无法更改的 java 类
interface Parent...
class Child1Class implements Parent...
class Child2Class implements Parent...
class GrandChild1Class extends Child1Class ...
...
Run Code Online (Sandbox Code Playgroud)
现在我编写 Kotlin 应用程序。
我想向所有层次结构添加一些功能。
fun Parent.foo(){ println("Parent.foo")
Run Code Online (Sandbox Code Playgroud)
但我想要有特殊的行为GrandChild1Class
fun GrandChild1Class.foo(){ println("GrandChild1Class.foo")
Run Code Online (Sandbox Code Playgroud)
但如果我写:
val grandChild1: Parent = GrandChild1Class()
grandChild1.foo()
Run Code Online (Sandbox Code Playgroud)
我看到Parent.foo是因为引用类型
但我希望看到GrandChild1Class.foo
有没有办法实现这种事情的多态行为?
寻找一个regex可以同时适用于Javascript和 的产品Java。
只要每个大写字母后面跟着一个 ,整个字符串就应该匹配:Y。
以下所有示例均应完全匹配。
所以任何大写字母后跟:Y. 喜欢A:Y。如果超过 1 对,则以逗号分隔。
S:Y,P:Y,T:Y,A:Y
S:Y,P:Y,T:Y,A:Y,C:Y
S:Y,P:Y,T:Y,A:Y,C:Y,D:Y
A:Y
B:Y
D:Y,F:Y
Run Code Online (Sandbox Code Playgroud)
以下所有内容都不应该匹配。因为其中 1 个或多个具有:N。
S:Y,P:N,T:Y,A:Y
S:Y,P:Y,T:Y,A:Y,C:N
S:Y,P:Y,T:N,A:Y,C:N,D:Y
A:N
B:N
D:Y,F:N
Run Code Online (Sandbox Code Playgroud)
我不想否定匹配,就像:N不存在一样。
^(?!.*:N).+$
Run Code Online (Sandbox Code Playgroud)
而是寻找一种匹配的方式:Y。
尝试了以下方法,但这最终导致了多个迷你匹配,这不是我想要的。
[SPTA:Y,]+
Run Code Online (Sandbox Code Playgroud)
这可行。但同样,这有多个迷你比赛。
(?:[A-Z]:Y(?:,|$))+
Run Code Online (Sandbox Code Playgroud)
我可以得到一些帮助吗?
目前,当我的流收到新值时,我尝试打印计数器值:
fn add_counter_to_stream<T: std::marker::Send + 'static>(
stream: PinnedStream<T>,
) -> PinnedStream<T> {
let counter = Arc::new(Mutex::new(0)); // Shared counter between threads
futures::StreamExt::boxed(stream.map({
let counter = Arc::clone(&counter);
move |value| {
let counter = Arc::clone(&counter);
async move {
// Print counter value and increment
let mut num = counter.lock().await;
println!("Counter: {}", *num);
*num += 1;
};
value
}
}))
}
Run Code Online (Sandbox Code Playgroud)
Arc::clone(&counter)然而,如上所示,除非我创建两个嵌套闭包并使用两次,否则代码不会编译。有没有一种方法可以重构它,以便在一个克隆操作中完成,为什么在这个示例中我需要两个闭包?
我正在编写一个通用调用来通过 JSON 存储和检索数据。因此,当从 JSON 加载数据时,我可以验证它是否是 aTJSONNumber但缺乏正确的方法来确定它是否是integer或double。目前我是这样做的,但我想还有更好的方法吗?
FDataStore: TDictionary<string, Variant>;
for index := 0 to Value.Count - 1 do begin
Pair := Value.Pairs[Index];
if Pair.JsonValue is TJSONNumber then
try
FDataStore.AddOrSetValue(Pair.JsonString.Value, (Pair.JsonValue as TJSONNumber).AsInt);
except
FDataStore.AddOrSetValue(Pair.JsonString.Value, (Pair.JsonValue as TJSONNumber).AsDouble);
end;
end;
Run Code Online (Sandbox Code Playgroud) 我知道这个问题,但我的有点不同。
为什么rehash具有二次复杂度,但operator [](可以调用rehash) 在最坏情况下具有线性复杂度?
抱歉,但我没有 10 分来添加图像,所以如果当你看到这个问题时一切都已经解决了,这是我在 cppreference 中看到的:
rehash复杂:
平均情况下与容器的大小呈线性关系,最坏情况下呈二次方关系。
operator[]复杂:
平均情况:恒定,最坏情况:大小呈线性。
我知道为什么 rehash 的复杂度会是二次方。然而,使其成为线性并不困难。因此,任一陈述都可以为真,但不能同时为真(仅当意味着不同的大小时,但我不明白什么可以被视为大小,除了元素的数量)。
最近我发现以下代码在几个主要编译器上编译,然后在运行时抛出:
std::cout << std::format("{:*<{}}", 10, "Hello") << std::endl;
Run Code Online (Sandbox Code Playgroud)
terminate called after throwing an instance of 'std::format_error'
what(): format error: argument used for width or precision must be a non-negative integer
Run Code Online (Sandbox Code Playgroud)
它会抛出异常,因为“10”应该出现在“Hello”之后,而不是之前。
但明显的问题是:为什么它在编译时没有失败?我的理解是,这些参数将在编译时进行类型检查,显然 aconst char*不能用作宽度说明符。为什么这不是编译错误?
如果您不明白为什么这会令人困惑,请知道 的第一个参数std::format()是 type std::format_string<...>。此类型在编译时采用字符串文字/字符串视图(由于其consteval构造函数),并在编译时读取给定字符串的内容以查看格式参数是否与格式字符串匹配。因此,保证不会std::format("{}");编译,因为字符串“{}”在编译时被读取为格式说明符,但类型列表显示没有传递任何参数,那么该空间中会放入什么?
我有一个例子,使用单个动画浮点值来控制其他元素的动画(包括两种颜色之间的淡入淡出)会很有用。一般是否有建议的方法来执行此操作,例如声明一个其当前状态值直接由外部可变浮动状态控制的动画?例如,如果可变浮点数在特定实例中为 0.25,则它控制的所有动画都将是一个状态与另一个状态之间的 25%。
我想要这种行为的原因是强制多个动画完全同步,即使在离开和重新进入合成时也是如此。我知道过渡通常用于控制多个动画,但据我了解,这并不能确保所有子动画完美同步,即以完全相同的完成百分比。
通过使用单个可动画浮动值并使用该值直接设置 UI 元素的位置或颜色,应该可以通过暴力来实现此目的。这是最好的解决方案吗?如果我使用这种方法,我仍然需要计算两种颜色之间的插值,并且我不完全确定如何执行此操作。我尝试深入研究 Compose 源代码,以了解 animateColorAsState() 可组合项是如何完成此操作的。颜色似乎被转换为 4D 矢量,我想它们是从那里线性插值的,但我找不到执行此操作的确切代码。是否有内置函数可以在颜色或矢量之间进行插值?否则,我可以自己计算该值,但我想尝试找到一种更干净的方法来实现所有这一切。
任何想法表示赞赏!
当我运行下面的代码将 xml 日期转换为 java 日期时,它在本地打印不同的值(CST),在运行相同代码的服务器中打印不同的值(UTC),这可能是什么原因?我怎样才能始终以我在本地获得的 CST 格式打印此日期。我无法使用最新的 java 日期 API,而必须使用基于 XML 的日期。
import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.Date;
import java.util.TimeZone;
import javax.xml.datatype.DatatypeConstants;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.util.Date;
import java.util.TimeZone;
public class Demo {
public static final TimeZone TIMEZONE = TimeZone.getTimeZone("America/Chicago");
public static Date convertDate(XMLGregorianCalendar value) {
if (value == null) {
return null;
} else {
if (value.getXMLSchemaType() == DatatypeConstants.DATE) {
return value.toGregorianCalendar().getTime();
} else {
return value.toGregorianCalendar(TIMEZONE, null, null).getTime();
}
}
}
public static void main(String[] args) { …Run Code Online (Sandbox Code Playgroud) 我有这个小片段试图将注释附加到源文件中。
let mut file: File = syn::parse_str(file_content.as_str()).expect("Failed to parse Rust code");
for item in &mut file.items {
// Use quote! to generate a comment and append it to the item
let mut comment: Attribute = parse_quote! {
/// This is a generated comment.
};
comment.style = AttrStyle::Outer;
match item {
Item::Struct(ref mut s) => {
s.attrs.push(comment.clone());
}
Item::Enum(ref mut e) => {
e.attrs.push(comment.clone());
}
Item::Fn(ref mut f) => {
f.attrs.push(comment.clone());
}
_ => {}
}
}
Run Code Online (Sandbox Code Playgroud)
但这是结果:
#[doc = r" …Run Code Online (Sandbox Code Playgroud) 我定义了一个函数和一个像这样的宏来设置矩阵内部的值:
void init_matrix(Matrix *mat, double ea[], size_t size)
{
for (int i = 0; i < mat->row; i++)
for (int j = 0; j < mat->col; j++) {
if (!(i*mat->col+j<size))
return;
mat->entries[i][j] = ea[i*mat->col + j];
}
}
#define init_matrix(mat, ...) init_matrix(mat, (double []) {__VA_ARGS__}, sizeof((double []) {__VA_ARGS__})/sizeof(double))
Run Code Online (Sandbox Code Playgroud)
现在工作正常,但我正在考虑将函数声明和宏移到头文件中,然后将该头文件包含到该程序中。但是当我这样做时,它可能会将函数的定义扩展为:
void init_matrix(Matrix *mat, (double []) {double ea[], size_t size}, sizeof((double []) {double ea[], size_t size})/sizeof(double))
Run Code Online (Sandbox Code Playgroud)
这会让一切变得混乱,对吧?我怎样才能避免这种情况?也许将此函数放在文件末尾并在其之前使用 #undef init_matrix ?或者有没有一种方法可以在代码的一部分中取消定义宏并使其像该部分之前和之后一样工作?
java ×3
c++ ×2
rust ×2
android ×1
c ×1
comments ×1
date ×1
datetime ×1
delphi ×1
fmt ×1
inheritance ×1
javascript ×1
json ×1
kotlin ×1
numbers ×1
polymorphism ×1
regex ×1
rust-tokio ×1
std ×1
syn ×1