我需要调用一个泛型方法,该方法将泛型 Func 作为其参数之一,其中 Type 参数仅在运行时已知。这部分代码是一个对象映射器,它在源对象和目标对象之间映射属性。ViewModelBase 是被视为“目标”对象的类的根。
我要调用的方法(在 ObjectMapperBuilder 上定义)具有以下签名:
public static ObjectMapperBuilder<TTarget> Create(
Type sourceType,
MappingDirection direction,
Func<TTarget, IDictionary<String, object>> getDictionaryFromTarget = null
);
Run Code Online (Sandbox Code Playgroud)
在我的基类中,我想调用上面的方法,但使用最派生的类型作为我的类型参数:
public ViewModelBase {
private ConcurrentDictionary<string, object> _propertyValues;
public ViewModelBase (object sourceObject) {
Type tTarget = this.GetType();
// 1. How do I create the Func? All it does is return a private member.
// This is wrong because it uses a compile-time generic parameter.
Func<TTarget,IDictionary<String,object>> myFunc = (vm) => vm._propertyValues;
// 2. Ho do I call …Run Code Online (Sandbox Code Playgroud) 我在Archive DSC模块中发现了一个错误(MSFT_ArchiveResource.psm1).在复制代码,在ISE中调试代码并找出需要修复的两行之后,我想对真实文件进行更改并使用Puppet和msutter/dsc模块进行测试,该模块使用归档资源.
我发现我认为文件在我的机器上的位置:
C:\Windows\System32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\DSCResources\MSFT_ArchiveResource\MSFT_ArchiveResource.psm1
Run Code Online (Sandbox Code Playgroud)
但是,当我运行Puppet时,很明显我的更改后的代码没有被执行.(如果我在文件的顶部设置$ Debug = $ true,我没有看到额外的输出.)是否有一些Windows缓存保存此文件,我必须清除?是从ZIP还是其他档案加载?
我怀疑Puppet是否与这个问题有关,但是如果它敲响了铃,就提起它.(我只在代理上进行了代码更改.)
更新:
当我在Powershell中运行以下行时,我找不到任何包含"dsccore"的预期名称的进程:
Get-WmiObject msft_providers | select -ExpandProperty provider
Run Code Online (Sandbox Code Playgroud)
结果:
RegistryEventProvider
PolicyAgentInstanceProvider
CIMWin32
Msft_ProviderSubSystem
SCM Event Provider
Win32_WIN32_TERMINALSERVICE_Prov
WmiPerfClass
WmiPerfClass
WmiPerfInst
WmiPerfInst
Run Code Online (Sandbox Code Playgroud) 如果C#编译器/抖动在所使用的硬件上可用,是否使用融合的乘法加法运算?如果可以,我是否需要设置任何特定的编译器设置才能利用它?
我的意图是将补偿算法用于扩展精度算术,并且其中一些可以编写为使用FMA。
我的目标是将针对我的结构的方法调用委托给 Trait 的方法,其中 Trait 对象位于 ofRc内部RefCell。
我尝试遵循这个问题的建议: How can I acquire an &A reference from a Rc<RefCell<A>>?
我收到编译错误。
use std::rc::Rc;
use std::cell::RefCell;
use std::fmt::*;
use std::ops::Deref;
pub struct ShyObject {
pub association: Rc<RefCell<dyn Display>>
}
impl Deref for ShyObject {
type Target = dyn Display;
fn deref<'a>(&'a self) -> &(dyn Display + 'static) {
&*self.association.borrow()
}
}
fn main() {}
Run Code Online (Sandbox Code Playgroud)
这是错误:
use std::rc::Rc;
use std::cell::RefCell;
use std::fmt::*;
use std::ops::Deref;
pub struct ShyObject {
pub association: Rc<RefCell<dyn …Run Code Online (Sandbox Code Playgroud) 使用 CS4,如何设置 List 控件的字体?我试过这个:
var myFormat:TextFormat = new TextFormat();
myFormat.font = config.settings["list font name"];
myFormat.size = Number(config.settings["list font size"]);
list.setStyle("textFormat", myFormat);
Run Code Online (Sandbox Code Playgroud)
没有骰子。
我有一个适用于Windows XP的Perl脚本.它使用File :: Copy的move功能将目录树移动到同一驱动器上的另一个位置.该脚本在Windows 2008上失败(静默).没有任何移动,没有删除任何内容.
我正在使用ActiveState Perl 5.10.0 Build 1005和它附带的File :: Copy.
有人知道Windows 2008上的ActiveState Perl可能会导致这个问题吗?
示例脚本:
use File::Copy;
print "Move AAA to ZZZ\n";
move("AAA", "ZZZ");
print "Done.\n";
Run Code Online (Sandbox Code Playgroud) 我正在尝试将随机数生成器存储在结构中。我似乎无法获得任何要识别的 Rng 结构的结构定义,例如 ThreadRng。这有效:
use rand::{
self,
distributions::{Distribution, Uniform},
}; // 0.6.4
fn main() {
let mut rng = rand::thread_rng();
let die_range = Uniform::new_inclusive(1, 6);
let die = die_range.sample(&mut rng);
println!("{}", die);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试定义一个变量以具有 Rng 的实际类型,则会收到错误:
use rand::{
self,
ThreadRng,
distributions::{Distribution, Uniform},
}; // 0.6.4
fn main() {
let mut rng :ThreadRng = rand::thread_rng();
let die_range = Uniform::new_inclusive(1, 6);
let die = die_range.sample(&mut rng);
println!("{}", die);
}
Run Code Online (Sandbox Code Playgroud)
错误是:
error[E0432]: unresolved import `rand::ThreadRng`
--> src/main.rs:3:5
|
3 | ThreadRng,
| ^^^^^^^^^ …Run Code Online (Sandbox Code Playgroud) 到目前为止,我发现的唯一示例代码已经很久了,它将不再起作用(使用已弃用的类).我所需要的只是一些基本的东西:
从文件加载和解析XML
定义SAX事件处理程序
读取传递给事件处理程序的元素的属性或文本值
我在文档中找到了如何创建受互斥体保护的全局状态的示例,该状态在可供所有路由处理程序使用的处理线程之间共享。完美的!但是,我更喜欢使用附加到我的函数的属性来连接我的路由处理程序。我不知道使用属性函数并传递全局状态的语法(如果允许)。
以下是 actix-web 文档中的示例,来自https://docs.rs/actix-web/1.0.2/actix_web/web/struct.Data.html
use std::sync::Mutex;
use actix_web::{web, App};
struct MyData {
counter: usize,
}
/// Use `Data<T>` extractor to access data in handler.
fn index(data: web::Data<Mutex<MyData>>) {
let mut data = data.lock().unwrap();
data.counter += 1;
}
fn main() {
let data = web::Data::new(Mutex::new(MyData{ counter: 0 }));
let app = App::new()
// Store `MyData` in application storage.
.register_data(data.clone())
.service(
web::resource("/index.html").route(
web::get().to(index)));
}
Run Code Online (Sandbox Code Playgroud)
请注意命名的路由处理程序index是如何传递的web::Data。
现在这里是我的代码的一些片段。
use actix_web::{get, App, HttpResponse, HttpServer, Responder};
pub mod request;
pub mod …Run Code Online (Sandbox Code Playgroud) 我已经阅读了很多精确的算法来识别32位和64位整数的最高位(包括SO上的其他帖子).但我正在使用BigIntegers,并将处理长达4000位的数字.(BigInteger将希尔伯特指数保持为Hilbert空间填充曲线,该曲线在分形深度为4的情况下蜿蜒通过1000维超立方体.)但是大部分情况将涉及可以适合64位整数的数字,所以我想要一个最适合常见情况的解决方案,但可以处理极端情况.
天真的方式是:
BigInteger n = 234762348763498247634;
int count = 0;
while (n > 0) {
n >>= 1;
count++;
}
Run Code Online (Sandbox Code Playgroud)
我正在考虑将常见情况转换为Longs并使用64位算法,否则使用不同的算法来处理真正的大数字.但我不确定转换为Long的成本是多少,以及这是否会影响在64位数量上进行剩余计算的效率.有什么想法吗?
该功能的一个预期用途是帮助优化逆灰度代码计算.
更新.我编写了两种方法并运行了基准测试.
如果数字非常大(我高达10000位),那么Log的速度提高了3.5倍.
一百万次调用MostSignificantBitUsingLog(可转换为Long)已经过了96毫秒.
对EverySignificantBitUsingBinarySearch(可转换为Long)的一百万次调用已过去42毫秒.
对于MostSignificantBitUsingLog进行一万次调用已经过了74毫秒(太大而无法转换).
对于MostSignificantBitUsingBinarySearch(太大而无法转换)的一万次调用已经过了267毫秒.
以下是使用Log的代码:
public static int MostSignificantBitUsingLog(BigInteger i)
{
int bit;
if (i == 0)
bit = -1;
else
bit = (int)BigInteger.Log(i, 2.0);
return bit;
}
Run Code Online (Sandbox Code Playgroud)
这是我的二元搜索方法.可以改进以将二进制除法扩展到BigInteger范围.我会尝试下一步.
public static int MostSignificantBitUsingBinarySearch(BigInteger i)
{
int bit;
if (i.IsZero)
bit = -1;
else if (i < ulong.MaxValue)
{
ulong y = (ulong)i;
ulong s;
bit …Run Code Online (Sandbox Code Playgroud) 我有一个hash哈希,我需要嵌入exec资源命令.我的想法是将序列化为hasha string并将其插入到exec中call.该exec调用将通过执行ruby代码ruby -e 'ruby code here'.
使用irb,我知道hash.to_s创建了一个可解析的单行版本hash.或者我可以使用json.我怀疑你可以打电话给to_s傀儡,但我不确定.
Puppet的stdlib有parseyaml和parsejson反序列化,但有没有办法序列化为可解析string?我可以编写一个自定义木偶函数来完成它,但如果有的话,我更喜欢已经内置的解决方案.
更新 我正在考虑定义一个木偶功能.我之前从未写过,所以我不确定语法.这是我的第一次尝试:
Puppet::Parser::Functions.newfunction(
:serialize_hash,
:arity => 2,
:doc => "Serialize a hash to any depth and optionally escape the double quotes.",
:type => :rvalue) do |args|
hash = args[0]
escape_quotes = args[1]
serialized = hash.to_s
if (escape_quotes)
serialized.sub!(/"/, "\\\"")
end
serialized
end
Run Code Online (Sandbox Code Playgroud)