我想尽可能避免锁定读取.但这种"感觉"就像是双重检查锁定,即使没有涉及部分初始化的成员.
这是一个很好的结构吗?
private final Map<String, Stuff> stash = new HashMap<String, Stuff>();
public Stuff getStuff(String name) {
if (stash.containsKey(name))
return stash.get(name);
synchronized(stash) {
if (stash.containsKey(name)) {
return stash.get(name);
}
else {
Stuff stuff = StuffFactory.create(name);
stash.put(name, stuff);
return stuff;
}
}
}
Run Code Online (Sandbox Code Playgroud) 令我震惊的是必须有一个聪明的方法来做到这一点.这不适用于家庭作业,工作或任何事情.我只是在使用具有数据交错的文件格式.
所以,在通用的C/C++中,(或其他)给出一些数组
int x[] = ...
Run Code Online (Sandbox Code Playgroud)
是否有一种聪明的方法将它分成两个短阵列
short sa1[], sa2[]
Run Code Online (Sandbox Code Playgroud)
这样int数组就从中间分割出来了
x[i] = 1111111111111111 1111111111111111
sa1[i] sa2[i]
Run Code Online (Sandbox Code Playgroud)
编辑:对不起,如果没有措辞.对于int数组的每个第i个元素,最左边的16位成为一个数组的第i个元素,最右边的16位成为第二个数组的第i个元素.
如此给定
x[i] = 0001111111111111 1111111100011111
Run Code Online (Sandbox Code Playgroud)
然后
sa1[i] = 0001111111111111
sa2[i] = 1111111100011111
Run Code Online (Sandbox Code Playgroud)
我正在寻找不明显的答案,这些答案不会遍历每个元素,并且会移动并屏蔽每个元素.这很简单 :)
想象一下,如果您想要建模非分数时间范围,可以是以下任何一种:
"1 hour" (all/any 1 hour period)
"1 hour, starting 1pm") (all/any 1 hour periods that start at 1pm)
"1 hour, starting 1pm, on Wednesdays" (all/any 1 hour periods that start at 1pm on wednesdays)
"1 hour, starting 1pm, on 3rd Wednesday in November"
"1 week, starting the first week in November"
Run Code Online (Sandbox Code Playgroud)
你明白了.另一个目标是轻松有效地计算这些范围的重叠和子集.例如"1小时,从星期三下午1点开始"与"1小时,从下午1点开始"重叠
附加信息:这适用于基线系统中的时间段.我希望基线段具有多个粒度的时间段.与下午1点的任何1小时时段的基线或11月3日星期三下午1点开始的1小时时段的基线一样.
另外一个考虑因素是这些基线周期将存储在无sql存储中,并且以存储中存在的最小粒度有效地细化周期将是很好的.(特定的日 - 周 - 小时期间是否存在?不,周小时怎么样?,不是?如何只是一小时的时间段 - 如果这是有道理的.也许是某种树状的层次结构.
编辑:存储和查询部分可能是最重要的要求.将存储数十亿个时间段,并且需要尽可能快地查找它们(找到最精细的粒度).我很乐意为了提高速度而牺牲完整性.
编辑:考虑更多,以及如何将其存储在数据存储区中,树状结构可能有利于高效查找.我可以沿着树走下去,以获得最好的粒度.
1hr
/
1hr@1pm
/
1hr@1pm@wednesday
/
1hr@1pm@wednesday@November
Run Code Online (Sandbox Code Playgroud)
这就是我想出来的,但我觉得它很弱.我将继续摆弄它并在这里进行更新,但我很想知道是否有人有更聪明的方法对此进行建模.
public class DateRange {
Integer fTimeSpan;
TimeUnit …Run Code Online (Sandbox Code Playgroud) 我想在命名空间中模拟一个宏.
例如,clojure.tools.logging/error.
我试着with-redefs没有运气
(def logged false)
(defmacro testerror
{:arglists '([message & more] [throwable message & more])}
[& args]
`(def logged true))
(deftest foo
...
(with-redefs
[log/error testerror]
...
Run Code Online (Sandbox Code Playgroud)
这给了这个错误:
CompilerException java.lang.RuntimeException: Can't take value of a macro
基本上我想看看是否有一种紧凑的lambda方式:
int n = ...
String s = "";
for (int i = 0; i < n; i++) {
s += 'a';
}
Run Code Online (Sandbox Code Playgroud)
开始很容易,然后我迷路了:
IntStream.range(0, n). ??
Run Code Online (Sandbox Code Playgroud) 我想写一个与文件系统路径匹配的PEG.路径元素是除/posix linux 之外的任何字符.
在PEG中有一个表达式来匹配any字符,但我无法弄清楚除了一个字符之外如何匹配任何字符.
我正在使用的peg解析器是PEST for rust.
我正在尝试编译一些较旧的Rust代码,并在这段代码上:
const SOMETHING: *const c_char = -1 as *const c_char;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
error: cannot apply unary operator `-` to type `usize`
--> src/lib.rs:32:34
|
32 | const SOMETHING: *const c_char = -1 as *const c_char;
|
Run Code Online (Sandbox Code Playgroud)
我怀疑这是因为c_char无符号和无符号不能为负,但我不知道如何解决它.此代码适用于一些未知的旧版Rust.我尝试c_char改为i8只是为了好玩,但是没有用.
您如何正确使用期望在循环中链接方法的构建器模式?使用log4rs中的示例。注意self不是中的参考appender。
//builder pattern from log4rs
pub struct ConfigBuilder {
appenders: Vec<Appender>,
loggers: Vec<Logger>,
}
impl ConfigBuilder {
pub fn appender(mut self, appender: Appender) -> ConfigBuilder {
self.appenders.push(appender);
self
}
}
Run Code Online (Sandbox Code Playgroud)
在下面执行此操作会导致错误,因为(我认为)cb正在移至所返回的内存中.appender()。
let cb = ConfigBuilder::new();
for x in ys {
cb.appender(x);
}
Run Code Online (Sandbox Code Playgroud)
这似乎在工作。这是唯一的方法吗?
let mut cb = ConfigBuilder::new();
for x in ys {
cb = cb.appender(x);
}
Run Code Online (Sandbox Code Playgroud) let mystring = format!("the quick brown {}", "fox...");
assert!(mystring.ends_with(mystring));
Run Code Online (Sandbox Code Playgroud)
错误:
the trait `std::ops::FnMut<(char,)>` is not implemented for `std::string::String`
Run Code Online (Sandbox Code Playgroud)
改变mystring.ends_with(mystring)以mystring.ends_with(mystring.as_str())修复它.
为什么这个错误如此神秘?
如果我在不使用格式的情况下创建字符串,请说:
let mystring = String::from_str("The quick brown fox...");
assert!(mystring.ends_with(mystring));
Run Code Online (Sandbox Code Playgroud)
错误更容易理解:
error[E0599]: no method named `ends_with` found for type
`std::result::Result<std::string::String, std::string::ParseError>`
in the current scope
Run Code Online (Sandbox Code Playgroud) fn main() {
foo().map_err(|err| println!("{:?}", err));
}
fn foo() -> Result<(), std::io::Error> {
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
结果:
warning: unused `std::result::Result` that must be used
--> src/main.rs:2:5
|
2 | foo().map_err(|err| println!("{:?}", err));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(unused_must_use)] on by default
= note: this `Result` may be an `Err` variant, which should be handled
Finished dev [unoptimized + debuginfo] target(s) in 0.58s
Running `target/debug/playground`
Run Code Online (Sandbox Code Playgroud)