我想在F#中创建一个接受printf样式函数作为参数的函数,并使用该参数输出数据.用法如下:
OutputStuff printfn
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是让编译器为我解决这个问题:
let OutputStuff output =
output "Header"
output "Data: %d" 42
Run Code Online (Sandbox Code Playgroud)
这失败是因为它决定这output是一个函数获取string和返回unit,所以第二次调用失败.
接下来,我尝试声明output具有相同的签名printfn:
let OutputStuff (output : Printf.TextWriterFormat<'a> -> 'a) =
output "Header"
output "Data: %d" 42
Run Code Online (Sandbox Code Playgroud)
这会失败,因为编译器决定实际类型output是Printf.TextWriterFormat<string> -> unit,所以第二次调用失败.它还会生成警告FS0064,指示第一次调用output导致代码不如类型注释更通用,这是问题的症结所在.
最后,我尝试将输出函数声明为单独的类型缩写:
type OutputMe<'a> = Printf.TextWriterFormat<'a> -> 'a
let OutputStuff (output : OutputMe<'a>) =
output "Header"
output "Data: %d" 42
Run Code Online (Sandbox Code Playgroud)
这失败的结果与之前的尝试相同.
如何说服编译器不专门化类型output并将其保留为Printf.TextWriterFormat<'a> -> 'a?
我正在尝试更新大型代码库以在格式化/解析值时正确指定CultureInfo和/或。IFormatProvider例如,当解析从用户那里获得的值时,我CultureInfo.CurrentCulture在调用 时传递TryParse,而当将浮点数转换为字符串以进行持久化时,我CultureInfo.InvariantCulture在调用 时传递ToString。
我的问题是:生成 SQL 查询时,我应该使用不变区域性、SQL 服务器区域性还是什么来格式化数字等?也就是说,如果我的计算机设置为德语(德国),那么以下哪个查询是正确的?
select foo from bar where baz = 123.45
Run Code Online (Sandbox Code Playgroud)
或者
select foo from bar where baz = 123,45
Run Code Online (Sandbox Code Playgroud)
同样,如果我使用 SQLCAST将浮点值转换为字符串,SQL 将使用什么区域设置进行转换?
我确实搜索了 SQL 文档,但到目前为止我找不到任何好的答案。我确实找到了一些有关日期格式的信息(SET DATEFORMAT 等),但仅此而已。
注意:我意识到将输入传递给 SQL 查询的首选方法是通过参数,因此为了论证,我们假设我有充分的理由将它们格式化为查询字符串。此外,处理查询输入只是更广泛问题的一部分。
powershell指南建议避免在脚本中使用别名,例如拼写Get-Content而不是使用gc,而Foreach-Object不是使用%.
在大多数情况下,我认为这是一个很好的建议,但我很难用dir别名跟踪它,至少在与文件系统一起使用时(与注册表等).在可读性方面,在我看来,它dir是好的或者更好Get-ChildItem的.它也不像gc(Get-Content)或lp(Out-Printer)那样神秘,尽管可能没有cmd.exe脚本背景的人可能不同意.
有人对此有意见吗?我应该继续使用dir,还是试着更"正确"?
有没有人知道如何只使用键盘在Visual Studio的C#项目设置编辑器中切换主要选项卡/页面?我在谈论左侧的东西,标记为应用程序,构建,调试,资源,设置等.它可以在当前所选页面上的控件之间的Tab中正常工作,但我还没弄清楚如何切换在页面之间,我希望避免尽可能多地离开键盘.
我最常访问的页面是Debug页面,因此即使没有通用方法,直接转到该页面的快捷方式也没问题.我尝试了Project.StartOptions命令,但似乎不是这样.
accessibility keyboard-shortcuts visual-studio-2010 visual-studio