小编Tim*_*son的帖子

忽略git commit中的文件但保护它不干净

在我的工作树中,我在.gitignore中混合了一些文件:

  1. 建立产出
  2. 敏感文件不应该是回购的一部分(例如密码,本地服务器的连接详细信息)

如果我想从头开始重建我的项目,我可以git clean -x删除(1)中的构建输出.但是这也删除了(2)中的敏感文件.

有没有办法标记文件,以便它git clean仍然被忽略而不受影响git commit?

git gitignore

7
推荐指数
1
解决办法
532
查看次数

我可以用局部变量来影响const绑定吗?

我认为这会奏效:

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)

const let rust

6
推荐指数
1
解决办法
126
查看次数

在观察窗口中显示seq

有没有办法让Visual Studio调试器显示F#seq表达式的内容?

Visual Studio了解IEnumerable<T>对象并在监视窗口内为您提供结果视图.如果你在观察窗口中看到其中一个,你会得到一堆私人田地.

一些潜在的选择:

  • fsi.exe可以很好地打印序列,但它不会与调试器交互
  • 找到一种Seq.toArray从调试器内部调用的方法.我找不到正确的语法来调用,例如,立即窗口.
  • 写一个vizualiser.我不知道是否可以将vizualisers附加到Microsoft类型.
  • 别的......?

编辑:进一步调查显示F#的seq对象实现IEnumerable<T>得很好 - 它们出现在观察窗口中 - 但由于某种原因,结果视图不会出现.

但是,F#seq对象似乎不是简单的IEnumerables; 相反,它们看起来是来自Seq模块内部功能的闭包.(F#seq对象看起来是使用{ new IEnumerable with ... }.创建的实例.)

debugging f# visual-studio

5
推荐指数
1
解决办法
1513
查看次数

强制显式类型参数

我有一个通用函数,很容易让编译器推断出错误的类型参数.类型参数仅控制返回类型,如果我不小心错过了类型注释,编译器会推断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)

f# inline

5
推荐指数
2
解决办法
970
查看次数

记录进程加载的 DLL

我想向我们的单元测试添加日志记录,以记录他们使用的 DLL 以及从何处加载它们。

我可以从 Sysinternals ListDLLs 获得我需要的信息,但是我需要在测试进程运行时运行它,并且我最终会遇到竞争条件:例如,ListDLLs 可能运行得太早,并且错过了一个 DLL在测试运行中途加载;或 ListDLL 可能在测试进程退出后运行得太晚。

同样,我可以从 Visual Studio 调试器的输出和模块窗口获取我需要的信息,但我想在我们的构建服务器上自动执行此操作。

是否有任何命令行工具可以运行任意 EXE、跟踪它使用的 DLL 并将信息记录到文件中?

windows dll profiling

5
推荐指数
1
解决办法
3055
查看次数

如何构造构造函数参数?

在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#不支持构造函数参数中的模式匹配?

f# pattern-matching

5
推荐指数
1
解决办法
206
查看次数

模糊类型变量

与我之前关于遍历数据结构的问题相关,当我将它与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)

此代码在最后两行产生以下错误:

Ambiguous type variable `l' in the constraint:
  `Data l' arising from a use of `transformBi' at Test.hs:31:10-52
Probable …
Run Code Online (Sandbox Code Playgroud)

haskell generic-programming

3
推荐指数
1
解决办法
920
查看次数

在 MSBuild 脚本中获取文件大小

我可以在不编写自己的代码的情况下从 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)

msbuild

3
推荐指数
1
解决办法
1070
查看次数

如何让编译器警告我标记为pub的未使用的代码?

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,因此我完全了解正在使用的代码.

compiler-warnings rust

3
推荐指数
1
解决办法
217
查看次数