我正在尝试构建一个没有任何外部依赖项的简单 Web 组件。只有两个 html 文件,一个 index.html 和一个 webcomponent.html。
我有一些个人 html 项目,我想将全局 html 命名空间分成更小的文件。我不想为此使用任何像聚合物这样的外部库。我不想使用任何构建系统或网络服务器。
我在网上找到的所有示例都需要外部构建系统或库。此外,如果没有网络服务器,它们也不会工作。例如,webcomponents/hello-world声称使用 vanilla-js。但事实上,它不是,因为它取决于鲍尔。
只有两个 html 文件在我的本地编辑-保存-刷新开发周期中工作。这真的可能吗?如果是这样,如何?如果没有,最接近的妥协是什么?
我正在实现 Rust Cargo 版本要求。一般来说,我很难理解指定的插入符要求。我发现package.json 中的 tilde(~) 和 caret(^) 有什么区别?,但是这个问题是关于 npm 版本要求的,我不确定它是否与 Rust Cargo 版本要求相同。
\n在https://doc.rust-lang.org/cargo/reference/specifying-dependency.html#caret-requirements,我读到:
\n\n\nCaret 要求允许 SemVer 兼容更新到指定版本。如果新版本号不修改主要、次要、补丁分组中最左边的非零数字,则允许更新。在这种情况下,如果我们运行,如果是最新版本,
\ncargo update -p timecargo 应该将我们更新到版本,但不会将我们更新到。相反,如果我们将版本字符串指定为,则货物应该更新为(如果它是最新版本),而不是。该版本不被视为与任何其他版本兼容。0.1.130.1.z0.2.0^1.01.11.y2.00.0.x
\n\n以下是插入符要求及其允许的版本的更多示例:
\n
\nRun Code Online (Sandbox Code Playgroud)\n^1.2.3 := >=1.2.3, <2.0.0\n^1.2 := >=1.2.0, <2.0.0\n^1 := >=1.0.0, <2.0.0\n^0.2.3 := >=0.2.3, <0.3.0\n^0.2 := >=0.2.0, <0.3.0\n^0.0.3 := >=0.0.3, <0.0.4\n^0.0 := >=0.0.0, <0.1.0\n^0 := >=0.0.0, <1.0.0\n此兼容性约定与 SemVer 的不同之处在于它对待之前版本的方式
1.0.0。虽然 …
我正在使用C#.NET 3.5.我明白了
参数类型'GenericTest.BarkStrategy'不能赋值给参数类型'GenericsTest.IAnimalStrategy'
以下(对于这个问题尽可能简化)代码:
using System.Collections.Generic;
namespace GenericsTest {
class Program {
static void Main(string[] args) {
List<IAnimalStrategy<IAnimal>> strategies =
new List<IAnimalStrategy<IAnimal>>();
strategies.Add(new BarkStrategy());
}
}
interface IAnimal { }
interface IAnimalStrategy<T> where T : IAnimal { }
class Dog : IAnimal { }
class BarkStrategy : IAnimalStrategy<Dog> { }
}
Run Code Online (Sandbox Code Playgroud) 考虑
var list = new List<string>();
someObject.AddOne(list);
Assert.AreEqual(1, list.Count);
Run Code Online (Sandbox Code Playgroud)
如何设置模拟?我预计
var mock = new Mock<SomeObject>();
var list = new List<string>();
mock
.Setup(so => so.AddOne(list))
.Callback<List<string>>(l => l.Add("derp"));
Run Code Online (Sandbox Code Playgroud)
正常工作,但没有调用回调。
我不能更改SomeObject,因为这是我使用的外部API。
考虑:
class X {}
class B extends X {}
class C extends X {}
Run Code Online (Sandbox Code Playgroud)
在一个组件中,我有一个 X 数组:
<template>
<ul>
<li v-for="item in items">
<a-view v-if="item.constructor.name === 'A'"></a-view>
<b-view v-if="item.constructor.name === 'B'"></b-view>
</li>
</ul>
</template>
export default {
...
data() {
return {
items: [new A(), new B()]
}
}
Run Code Online (Sandbox Code Playgroud)
这有效,但并不优雅。类型检查使用字符串,其中item instanceof B将是惯用的 es6 代码。但是,这不起作用。
在 vue.js 中呈现多态列表的惯用方式是什么?
考虑
interface IResult {}
class Result : IResult {}
class Results : IResult {}
class Producer {
private Results results;
IResult DoSomething() {
return results ?? new Result();
}
}
Run Code Online (Sandbox Code Playgroud)
这会因编译器错误而失败
Operator '??' cannot be applied to operands of type `Result` and `Results`
Run Code Online (Sandbox Code Playgroud)
对我来说,这是出乎意料的行为.考虑到这一点,.NET框架可能会创建一个类型的中间变量Results(左操作数).右操作数Result的类型不同,因此会产生类型转换错误.这个假设是否正确?
如果是,为什么csc不会检测到中间变量的类型IResult?
所以我把代码改成了样子
return results == null ? new Result() : results;
Run Code Online (Sandbox Code Playgroud)
但是这段代码错了
There is no explicit conversion between `Result` and `Results`
Run Code Online (Sandbox Code Playgroud)
为什么?我不指望这个,因为两个实例都符合IResult.
代替
string someString = "AB";
Run Code Online (Sandbox Code Playgroud)
我偶然发现了
string someString = "A" + "B";
Run Code Online (Sandbox Code Playgroud)
是否有任何技术解释使第二种方式更有利?
c# ×4
javascript ×2
polymorphism ×2
.net ×1
ecmascript-6 ×1
file ×1
generics ×1
html ×1
moq ×1
operators ×1
rust ×1
rust-cargo ×1
string ×1
vuejs2 ×1