在我的工作树中,我在.gitignore中混合了一些文件:
如果我想从头开始重建我的项目,我可以git clean -x删除(1)中的构建输出.但是这也删除了(2)中的敏感文件.
有没有办法标记文件,以便它git clean仍然被忽略而不受影响git commit?
我认为这会奏效:
const x: &str = "10"; // declare a const
let x: i32 = x.parse().unwrap(); // reuse the same name for a let binding
assert_eq!(10, x);
Run Code Online (Sandbox Code Playgroud)
但:
error[E0308]: mismatched types
--> src/main.rs:3:9
|
3 | let x: i32 = x.parse().unwrap(); // reuse the same name for a let binding
| ^ expected i32, found reference
|
= note: expected type `i32`
found type `&'static str`
error[E0277]: the trait bound `{integer}: std::cmp::PartialEq<&str>` is not satisfied
--> src/main.rs:4:5
|
4 | assert_eq!(10, …Run Code Online (Sandbox Code Playgroud) 有没有办法让Visual Studio调试器显示F#seq表达式的内容?
Visual Studio了解IEnumerable<T>对象并在监视窗口内为您提供结果视图.如果你在观察窗口中看到其中一个,你会得到一堆私人田地.
一些潜在的选择:
Seq.toArray从调试器内部调用的方法.我找不到正确的语法来调用,例如,立即窗口.编辑:进一步调查显示F#的seq对象实现IEnumerable<T>得很好 - 它们出现在观察窗口中 - 但由于某种原因,结果视图不会出现.
但是,F#(F#seq对象似乎不是简单的IEnumerables; 相反,它们看起来是来自Seq模块内部功能的闭包.seq对象看起来是使用{ new IEnumerable with ... }.创建的实例.)
我有一个通用函数,很容易让编译器推断出错误的类型参数.类型参数仅控制返回类型,如果我不小心错过了类型注释,编译器会推断obj.
如何在不给它显式类型参数的情况下调用我的函数使编译时错误?该Unchecked.defaultof功能按我喜欢的方式工作:
> Unchecked.defaultof;;
Unchecked.defaultof;;
^^^^^^^^^^^^^^^^^^^
stdin(1,1): error FS0685: The generic function 'defaultof' must be given explicit type argument(s)
Run Code Online (Sandbox Code Playgroud) 我想向我们的单元测试添加日志记录,以记录他们使用的 DLL 以及从何处加载它们。
我可以从 Sysinternals ListDLLs 获得我需要的信息,但是我需要在测试进程运行时运行它,并且我最终会遇到竞争条件:例如,ListDLLs 可能运行得太早,并且错过了一个 DLL在测试运行中途加载;或 ListDLL 可能在测试进程退出后运行得太晚。
同样,我可以从 Visual Studio 调试器的输出和模块窗口获取我需要的信息,但我想在我们的构建服务器上自动执行此操作。
是否有任何命令行工具可以运行任意 EXE、跟踪它使用的 DLL 并将信息记录到文件中?
在F#中,我可以在语法中的各个位置使用模式匹配.
例如:
// Given this type...
type SingleCaseUnion = | SingleCaseUnion of int
/// ...I can do this:
let destructureInFunc (SingleCaseUnion n) =
printfn "%d" n
// ...and this:
type DestructureInMethod() =
member t.M(SingleCaseUnion n) =
printfn "%d" n
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何做到这一点:
type DestructureInCtor(SingleCaseUnion n) =
do printfn "%d" n
// type DestructureInCtor(SingleCaseUnion n) =
// ---------------------------------------^
//
// stdin(3,40): error FS0010: Unexpected identifier in type definition. Expected ')' or other token.
Run Code Online (Sandbox Code Playgroud)
我是否有错误的语法,或者F#不支持构造函数参数中的模式匹配?
与我之前关于遍历数据结构的问题相关,当我将它与uniplate包一起使用时,我遇到了使代码变得通用的问题.我正在处理Language.Exts.Annotated.Syntax模块中的数据结构,它们都是类型参数的通用l.这l是整个树中的相同.
我写的代码是这样的:
doInt :: Child1 l -> Child1 l
doInt (Child1 l n) = Child1 l (n + 1)
doString :: Child2 l -> Child2 l
doString (Child2 l (_:s)) = Child2 l ('j' : s)
replace :: Data l => Parent l -> Parent l
replace = transformBi doInt
. transformBi doString
Run Code Online (Sandbox Code Playgroud)
此代码在最后两行产生以下错误:
Run Code Online (Sandbox Code Playgroud)Ambiguous type variable `l' in the constraint: `Data l' arising from a use of `transformBi' at Test.hs:31:10-52 Probable …
我可以在不编写自己的代码的情况下从 MSBuild 脚本中找出一组文件的大小吗?
MSBuild 本身有一些关于个别项目的元数据(例如,上次修改时间在 %(ModifiedTime) ),但没有大小。我在http://msbuildextensionpack.com/看不到任何东西。
编辑:根据 Seva 的回答,这里有一个内联任务,它返回一组项目的总大小:
<UsingTask TaskName="GetFileSize" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
<TotalSize ParameterType="System.Int64" Output="true"/>
</ParameterGroup>
<Task>
<Using Namespace="System.IO"/>
<Code Type="Fragment" Language="cs"><![CDATA[
long l = 0;
foreach (var item in Files) {
var fi = new FileInfo(item.ItemSpec);
l += fi.Length;
}
TotalSize = l;
]]></Code>
</Task>
</UsingTask>
Run Code Online (Sandbox Code Playgroud) Rust警告未使用的私人物品:
warning: function is never used: `hmm`
--> src/example.rs:357:1
|
357 | fn hmm() {
| ^^^^^^^^
|
= note: #[warn(dead_code)] on by default
Run Code Online (Sandbox Code Playgroud)
我有一些标记pub为我知道没有被使用的代码.我怎样才能让编译器警告我这个?
这是在一个库和一系列二进制文件的上下文中,所有这些都在同一个工作区中.该库仅供这些二进制文件使用; 该库未被其他任何人使用,我不打算上传到crates.io,因此我完全了解正在使用的代码.