对不起,我知道这是超级基本但似乎无法找到答案.在Typescript上做一个Lynda教程(https://www.lynda.com/Visual-Studio-tutorials/TypeScript-types-part-2/543000/565613-4.html#tab),我遇到了麻烦.示例代码说明了switch语句在TS中是如何工作的,但是对于教师而言似乎正常工作的代码抛出了类型'x'与类型'y'错误不可比.这是代码:
enum temperature{
cold,
hot
}
let temp = temperature.cold;
switch (temp) {
case temperature.cold:
console.log("Brrr....");
break;
case temperature.hot:
console.log("Yikes...")
break;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误并在'case temperature.hot'下曲线说'Type'temperature'hot'与'temperature.cold'类型无法比较.是什么赋予了?
在涉及自定义Serde(1.0)序列化和反序列化方法的项目中,我依靠此测试例程来检查序列化对象和返回是否会产生等效对象.
// let o: T = ...;
let buf: Vec<u8> = to_vec(&o).unwrap();
let o2: T = from_slice(&buf).unwrap();
assert_eq!(o, o2);
Run Code Online (Sandbox Code Playgroud)
这样的内联工作非常好.我对可重用性的下一步是check_serde为此目的发挥作用.
pub fn check_serde<T>(o: T)
where
T: Debug + PartialEq<T> + Serialize + DeserializeOwned,
{
let buf: Vec<u8> = to_vec(&o).unwrap();
let o2: T = from_slice(&buf).unwrap();
assert_eq!(o, o2);
}
Run Code Online (Sandbox Code Playgroud)
这适用于拥有类型,但不适用于具有生命周期边界的类型(Playground):
check_serde(5);
check_serde(vec![1, 2, 5]);
check_serde("five".to_string());
check_serde("wait"); // [E0279]
Run Code Online (Sandbox Code Playgroud)
错误:
error[E0279]: the requirement `for<'de> 'de : ` is not satisfied (`expected bound lifetime parameter 'de, found concrete lifetime`)
--> …Run Code Online (Sandbox Code Playgroud) 我有一个隐含该Error特征的错误类型,它包装了一个潜在的错误原因,因此该source方法返回Some(source). 我想知道Display我的错误类型的 impl 是否应该包含该源错误的描述。
我可以看到两个选项:
source在Display输出中,例如“打开数据库时出错:没有这样的文件”这使得只需通过格式化即可轻松打印整个错误链,"{}"但不可能仅显示错误本身而不显示底层源错误链。它还使该source方法有点毫无意义,并且使客户端代码无法选择如何格式化链中每个错误之间的分隔。然而,在我发现的示例代码中,这种选择似乎很常见。
source如果客户端代码希望将其包含在输出中)。这使客户端代码可以选择是否仅显示表面错误或整个链,以及在后一种情况下如何格式化链中每个错误之间的分隔。它给客户端代码留下了遍历链的负担,而且我还没有找到一个规范的实用程序来方便地格式化错误链,其中每个错误都只Display自己排除source。(所以我当然有自己的。)
混乱的箱子(我真的很喜欢)似乎暗示有利于选项 2,因为带有字段source但没有display属性的错误变体默认为格式化Display不包含source.
也许我真正的问题是:该方法的目的是什么source?是为了让格式化错误链更加灵活吗?或者Display真的应该输出用户可见的有关错误的所有内容,并且source仅用于开发人员可见的目的?
我希望看到一些关于此的明确指导,最好是在该Error特征的文档中。
#[derive(Debug)]
enum DatabaseError {
Opening { source: io::Error },
}
impl Error for DatabaseError {
fn source(&self) -> Option<&(dyn Error + 'static)> {
match self {
DataBaseError::Opening { source …Run Code Online (Sandbox Code Playgroud) 在TensorFlow,tf.layers并且tf.contrib.layers共享许多功能(标准2D卷积层,批标准化层等)的.两者之间的区别仅仅在于封装被认为是稳定contrib.layers的layers封装仍然是实验性的吗?或者一个被另一个取代?其他差异?为什么这两个分开?
我最近了解了Javascript 中的可选链,并在 React/NodeJS 项目中使用了它。效果很好。
我注意到我一直在将它与数组一起使用map,即使没有考虑太多——这似乎是一个自然的使用(这里items是一个数组,或者可能是undefined)
{items?.map(postListItem => ....
Run Code Online (Sandbox Code Playgroud)
也就是说,它将映射 ifexists items,但不会映射 if itemsis ,但如果我要调用undefined,它将避免任何运行时错误mapundefined
尽管如此,我不知道这是否是可接受的用途,或者我是否错误地使用了可选链。我寻找答案,但到目前为止还没有找到答案,这让我怀疑我使用不当。任何信息非常感谢!
在我的代码中
mutable struct frame
Lx::Float64
Ly::Float64
T::Matrix{Float64} #I think the error is here
function frame(
Lx::Float64,
Ly::Float64,
T::Matrix{Float64}
)
return new(Lx, Ly, T)
end
end
frames = frame[]
push!(frames, frame(1.0, 1.0, undef)) #ERROR here I try nothing, undef, any
push!(frames, frame(2.0, 1.0, undef)) #ERROR here I try nothing, undef, any
frames[1].T = [1 1 2]
frames[2].T = [[2 4 5 6] [7 6 1 8]]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误::Matrix
ERROR: MethodError: no method matching frame(::Float64, ::Float64, ::UndefInitializer)
Closest candidates are:
frame(::Float64, ::Float64, …Run Code Online (Sandbox Code Playgroud) 问题我是单元测试还是集成测试?我已经回答了,有点挑衅:做你的测试,让其他人花时间分类.
对我来说,各种级别的测试之间的区别在技术上是没有意义的:通常使用相同的工具,需要相同的技能,达到相同的目标:消除软件故障.与此同时,我可以理解大多数开发人员使用的传统工作流程需要这种区分.我对传统工作流程感到不安.
因此,我的问题旨在更好地理解对我来说是什么样的争议,以及收集关于各级测试之间的这种分离是否相关的各种观点.
我的意见错了吗?是否存在其他不强调这种分离的工作流程(可能是敏捷方法)?您对此主题的体验是什么?
精确度:我完全了解这些定义(对于那些没有定义的人,请参阅此问题).我想我不需要有关软件测试的课程.但如果您的答案需要,请随时提供一些背景知识.
请参阅:https ://reactjs.org/blog/2015/12/16/ismounted-antipattern.html 以及此处:如何取消对componentWillUnmount的获取并在此处:ismounted antipattern,track own property
在这两种情况下,他们提到了3种方
promise.resolve支票中this.IsMounted(),如果"已安装已卸载",React将为您正确返回promise.resolve检查中_isMounted,您已在ComponentWillUnmount()方法中手动跟踪.promise永远不会解决.这将解决你所有的问题并让它变得可爱.除了,在第三种情况下你的promise遗嘱error(),但也可能error()在其他情况下(例如API已关闭).
所以实际上第3个选项可归结为: - 在您的promise.error检查中errorPayload.IsCancelled,您已在cancellablePromise对象中手动跟踪,而该检查又由手动调用触发ComponentWillUnmount.
所以这三个都完全相同:
处理
promise结果时,请检查此变量的值,该值与组件是否已经存在直接关联unmounted.
为什么他们声称第3个选项比其他2更好,并且第1个选项是反模式.
为什么下面的代码会出错?[T; N]into有一个全面的实现Vec<T>,那么为什么在这种情况下dyn Foo不匹配呢?Fooable是否有不涉及克隆的解决方法Fooable?
trait Foo {}
struct Fooable {}
impl Foo for Fooable {}
pub fn main() {
let bar: Vec<Box<dyn Foo>> = [
Box::new(Fooable {}),
].into();
}
Run Code Online (Sandbox Code Playgroud)
错误:
error[E0277]: the trait bound `Vec<Box<dyn Foo>>: From<[Box<Fooable>; 1]>` is not satisfied
--> src/main.rs:10:7
|
10 | ].into();
| ^^^^ the trait `From<[Box<Fooable>; 1]>` is not implemented for `Vec<Box<dyn Foo>>`
|
= help: the following other types implement trait `From<T>`:
<Vec<T, A> …Run Code Online (Sandbox Code Playgroud) rust ×3
javascript ×2
python ×2
reactjs ×2
tensorflow ×2
julia ×1
lifetime ×1
serde ×1
testing ×1
typescript ×1