小编jra*_*ali的帖子

MSBuild和F#的FAKE有什么区别?

我是.NET生态系统的新手,我正在使用来自Java-land的F#.我正试图围绕工具和构建过程.

我的理解是MSBuild是.NET应用程序的构建工具,它的构建配置是在.sln和/或.*proj文件中用XML定义的.假设这类似于java中的pom.xml或build.gradle文件,我是否正确?

无论如何,如果MSBuild是构建工具,那么FAKE到底是什么?什么可以做那个MSBuild不能做到的?它只是围绕MSBuild配置文件更友好的"包装器"吗?

编辑:

我看到了一个名为Ionide和F#开源环境的视频,其中主要的演示者提供了一个原因.至少在VSCode中仍然需要.*proj文件.以下不是直接引用,但接近结尾,他说的是

在与编译器通信和使代码工作方面,根本不需要MSBuild系统.我们无法将它拉出来的唯一原因是因为F#编译器服务 - 提供工具提示信息,某种类型的类型检查等 - 取决于项目文件,但我们正在努力扩展它以便它可以使用不同类型的格式.

.net msbuild f# build f#-fake

17
推荐指数
1
解决办法
755
查看次数

Tempered Greedy Token - 在负前瞻之前放置点有什么不同

<table((?!</table>).)*</table>
Run Code Online (Sandbox Code Playgroud)

但是,匹配我的所有表格标签

<table(.(?!</table>))*</table>
Run Code Online (Sandbox Code Playgroud)

才不是.第二个似乎是有意义的,如果我试图用文字写出表达,但我无法理解第一个.

有人可以向我解释一下这个区别吗?

作为参考,我从这里得到了"Tempered Greedy Token"这个术语:http://www.rexegg.com/regex-quantifiers.html#tempered_greed

regex eclipse

16
推荐指数
3
解决办法
2334
查看次数

算术运算的左侧必须是"any","number"或枚举类型

1    interface Dimensions {
2        width: Number,
3        height: Number
4    }
5
6    function findArea(dimensions: Dimensions): Number {    
7        return dimensions.height * dimensions.width;
8    }
Run Code Online (Sandbox Code Playgroud)

第7行,红色波浪线下dimensions.heightdimensions.width

算术运算的左侧必须是"any","number"或枚举类型.

我正在努力消除红色波浪形,但我很难过为什么这个打字稿编译器给了我一个错误.据我所知,宽度和高度都是Number类型.

typescript

13
推荐指数
5
解决办法
3万
查看次数

在Javascript中使用'枚举'类型而不是字符串有什么意义吗?

来自强类型语言的背景,我从枚举中获得的主要好处是编译时错误捕获.

我正在用Javascript编写一个小程序,我发现自己想要像enum这样的东西,也许是这样的:

var Fruit = {
   BANANA: "BANANA",
   APPLE: "APPLE",
   PEAR: "PEAR";
};
Run Code Online (Sandbox Code Playgroud)

但我认为没有优势.我不妨在所有需要"枚举"的地方使用字符串.

我应该在javascript中使用字符串代替其他语言的枚举类型吗?

javascript

9
推荐指数
1
解决办法
139
查看次数

为什么在单元测试时接口模拟比子类模拟更理想?

当一个类实现一个接口时,很容易模拟,但是,你必须为它创建一个接口.

您也可以通过子类化和覆盖进行模拟.如果您的基类提供无参数保护的构造函数,那么您的子类mocks不依赖于基类构造函数中的更改.

乍一看,似乎创建模拟的子类化方法比为所有内容创建接口更令人满意,但很明显,这并不是大多数人这样做的方式.

那么,为什么基于接口的模拟被认为比基于子类的模拟更好?

oop unit-testing mocking

8
推荐指数
1
解决办法
598
查看次数

TypeScript tsconfig 文件中的默认编译器选项是什么?

在描述 tsconfig.json 文件的 TypeScript 页面上,它说:

\n\n
\n

可以省略“compilerOptions”属性,在这种情况下,使用编译器\xe2\x80\x99s 默认值。请参阅我们支持的编译器选项的完整列表。

\n
\n\n

但是,我在任何地方都找不到这些默认值。谁能指出我正确的方向,或者,如果您知道,请将它们发布在这里?

\n\n

或者,我想以某种方式将编译器选项输出到控制台,但我不知道该怎么做。

\n\n

编辑:所以,我刚刚意识到一些我认为有助于回答这个问题的事情。我认为布尔选项都默认为 false,这可能解释了为什么没有提到这些选项的默认值。如果是这样的话,那么它会留下以下选项,而不会记录默认值(但我必须承认,这些选项似乎都有明显的默认值):

\n\n

--字符集

\n\n

--区域设置

\n\n

- 新队

\n

typescript

8
推荐指数
1
解决办法
5410
查看次数

为什么Paket需要三个文件来支持依赖管理?

我是一名习惯于Maven和Gradle的Java开发人员,现在进入.NET并尝试了解Paket.根据我的理解,Paket有三个不同的文件支持.NET解决方案的依赖管理:

  1. 一个root paket.dependencies文件,其中列出了直接依赖项和版本.
  2. 一个项目特定的paket.references文件,其中列出了您在paket.dependencies中列出的依赖项的子集.
  3. 一个paket.lock自动生成的文件,列出所有直接和传递依赖项及其版本.

使用Maven和Gradle,我习惯在一个文件中指定我的依赖项.我可以指定确切的版本,并确保后续依赖的下载将是相同的.为什么Paket需要三个文件?我希望每个项目中的paket.references文件就足够了.在.NET世界中是如何管理依赖关系的一些问题或怪癖我不知道需要这三个文件?

.net build dependency-management maven paket

8
推荐指数
1
解决办法
170
查看次数

为什么Gradle或Maven没有依赖项版本锁定文件?

在阅读有关NPM,Yarn,Paket,Cargo等软件包管理器的信息时,我最近被引入了依赖版本锁定文件的概念。我的理解是,它是一个文件,其中列出了所有直接和可传递的依赖关系以及它们的确切含义。版本号,因此可以确保以后的版本使用等效的一组依赖关系。这似乎是一个理想的功能,因为许多程序包管理器已经或正在采用该概念。

我的问题是:

  1. 为什么Maven或Gradle不使用锁定文件?或者,如果这样做,我为什么还没有看到呢?

  2. 在包管理器的依赖关系解决方案策略中允许版本范围与仅允许确切版本相比,其优缺点是什么?

java package-managers gradle maven dependency-resolution

8
推荐指数
2
解决办法
1969
查看次数

为什么Object .__ proto __.__ proto__不为空?

我的理解是它Object.__proto__是javascript中的"顶级"原型对象.我希望它__proto__是null,但在谷歌Chrome(没有尝试过其他浏览器),它不是.这是为什么?

编辑

我知道下面的图像可能是下面的图像的重新哈希,但我自己做了检查我的理解.它有什么问题吗? 在此输入图像描述

javascript prototype

7
推荐指数
2
解决办法
506
查看次数

无法提取通用接口

我想创建一个可以在不同数字基础之间切换的计算器应用程序.就输入数字而言,我认为以下是灵活的api:

public interface ICalculator
{
    string Enter(INumberElement element);
}

public class BaseTenCalculator : ICalculator
{
    public string Enter(INumberElement element)
    {
        ...
    }
}

public class BaseTwoCalculator : ICalculator
{
    public string Enter(INumberElement element)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,对于BaseTenCalculator,我想要一个方法

Enter(BaseTenNumberElement element)
Run Code Online (Sandbox Code Playgroud)

对于BaseTwoCalculator,我想要一个方法

Enter(BaseTwoNumberElement element)
Run Code Online (Sandbox Code Playgroud)

确保只输入该数字基数的有效数字.但是,我能想到强制执行此约束的唯一方法是在两个不同的实现中向下转换'element'参数,如果INumberElement的类型不正确则抛出异常.我觉得这是'错的',我错过了一些东西.还有另外一种方法吗?是否可以为两个不同数量的基础计算器创建一个通用接口?

oop abstract-class design-patterns interface

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