我正在将一个带有React的Typescript用于一个项目.Main组件通过此接口获得传递状态.
interface MainState {
todos: Todo[];
hungry: Boolean;
editorState: EditorState; //this is from Facebook's draft js
}
Run Code Online (Sandbox Code Playgroud)
但是,下面的代码(仅限摘录)将无法编译.
class Main extends React.Component<MainProps, MainState> {
constructor(props) {
super(props);
this.state = { todos: [], hungry: true, editorState: EditorState.createEmpty() };
}
onChange(editorState: EditorState) {
this.setState({
editorState: editorState
});
}
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨说,在onChange我只尝试为一个属性设置setState 的方法中,属性todos和属性hungry在类型中缺失{ editorState: EditorState;}.换句话说,我需要在onChange函数中设置所有三个属性的状态以使代码编译.为了编译,我需要做
onChange(editorState: EditorState){
this.setState({
todos: [],
hungry: false,
editorState: editorState
});
}
Run Code Online (Sandbox Code Playgroud)
但是没有理由在代码中设置todos此hungry属性.在typescript/react中只调用一个属性的正确方法是什么?
我是Haskell的新手,我正在努力调试我的代码.修复错误会导致其他错误......
这是我的代码.
import Data.Maybe
data Op = Add | Sub | Mul | Div | And | Or | Not | Eq | Less | Great
deriving (Eq, Show)
data Exp = Literal Value
| Primitive Op [Exp]
| Variable String
| If Exp Exp Exp
| Let [(String, Exp)] Exp
deriving (Show, Eq)
data Value = Number Int
| Bool Bool
| String String
deriving (Eq, Show)
type Env = [(String, Value)]
eval :: Env -> Exp -> Value …Run Code Online (Sandbox Code Playgroud) CURRENT_TIMESTAMP和GETDATE()SQL Server有什么区别?
SELECT CURRENT_TIMESTAMP, GETDATE()
Run Code Online (Sandbox Code Playgroud) 我正在以这种方式捕获lambda表达式中的unique_ptr:
auto str = make_unique<string>("my string");
auto lambda = [ capturedStr = std::move(str) ] {
cout << *capturedStr.get() << endl;
};
lambda();
Run Code Online (Sandbox Code Playgroud)
它工作得很好,直到我尝试移动capturedStr到另一个unique_ptr.例如,以下内容不起作用:
auto str = make_unique<string>("my string");
auto lambda = [ capturedStr = std::move(str) ] {
cout << *capturedStr.get() << endl;
auto str2 = std::move(capturedStr); // <--- Not working, why?
};
lambda();
Run Code Online (Sandbox Code Playgroud)
这是编译器的输出:
.../test/main.cpp:11:14: error: call to implicitly-deleted copy
constructor of 'std::__1::unique_ptr<std::__1::basic_string<char>,
std::__1::default_delete<std::__1::basic_string<char> > >'
auto str2 = std::move(capturedStr);
^ ~~~~~~~~~~~~~~~~~~~~~~ ../include/c++/v1/memory:2510:31: note: copy constructor is implicitly …Run Code Online (Sandbox Code Playgroud) 我需要对Haskell的懒惰做一些澄清.
如果我有这个功能:
myFunction arg
| arg == 1 = a
| arg == 2 = a*b
| arg == 3 = b+c
| otherwise = (a+b)*c
where
a = ...
b = ...
c = ...
d = ...
Run Code Online (Sandbox Code Playgroud)
当我打电话时myFunction 1,Haskell将只评估a = ...函数,既不是b也不是c,也不是d.
但如果我写
myFunction arg
| arg == 1 = a
| arg == 2 = a*b
| arg == 3 = b+c
| otherwise = (a+b)*c
where
(a,b,c,d) …Run Code Online (Sandbox Code Playgroud) "C++ Primer"(第5版)建议在第149页上,简短的代码比较长的替代方案更不容易出错.它将以下代码行作为示例:
cout << *iter++ << endl;
Run Code Online (Sandbox Code Playgroud)
它声称上述行比其他行更不容易出错:
cout << *iter << endl;
++iter;
Run Code Online (Sandbox Code Playgroud)
对我来说,即使含义*iter++很明确,这个表达式仍然需要非零的心理努力来解析,因此第二个版本更具可读性.所以,我想理解:第二个版本更容易出错?
如何从typescript中显式声明全局命名空间中的变量?
我需要编译器生成以下javascript代码:
MyExtension = someFunction()
Run Code Online (Sandbox Code Playgroud)
不幸的是,我只能生成它
var MyExtension = someFunction()
Run Code Online (Sandbox Code Playgroud)
这与流星包的最新版本(仍在rc中)有关.Meteor引入了一种方法来定义包中的命名空间 - 问题是,变量需要在全局命名空间中定义(流星重新路由到它自己的Package对象).
有关于它的视频,请访问https://www.eventedmind.com/posts/meteor-linker-package-namespacing.
是否有某种global关键字可用或在计划中?
如果多个线程尝试更新相同的成员变量,则称其为竞争条件.但是我更感兴趣的是,如果我们不通过使它同步或其他东西在我们的代码中处理它,JVM如何在内部处理它?它会挂起我的程序吗?JVM将如何应对?我认为JVM会暂时为这种情况创建一个同步块,但我不确定究竟会发生什么.
如果你们中的任何人有一些见解,那么最好知道.
我刚刚注意到,当你List在c#中声明一个时,你可以在最后添加括号或花括号.
List<string> myList = new List<string>();
List<string> myList2 = new List<string>{};
Run Code Online (Sandbox Code Playgroud)
这两个列表似乎都具有相同的功能.用括号或花括号声明它们是否有任何实际差异?
出于某种原因,加入\n到printf()改变的下面的代码的行为.没有\n打印(null)的代码而\n导致的代码Segmentation fault.
Printf.c
#include <stdio.h>
int main(int argc, char* argv[]){
printf("%s", argv[1]);
}
Run Code Online (Sandbox Code Playgroud)
Printf.c - 输出
$ gcc -o Printf Printf.c
$ ./Printf
(null)
Run Code Online (Sandbox Code Playgroud)
Printf_Newline.c
#include <stdio.h>
int main(int argc, char* argv[]){
printf("%s\n", argv[1]);
}
Run Code Online (Sandbox Code Playgroud)
Printf_Newline.c - 输出
$ gcc -o Printf_Newline Printf_Newline.c
$ ./Printf_Newline
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
我很想知道这背后的原因.