小编sen*_*hin的帖子

允许typescript编译器仅在一个react状态属性上调用setState

我正在将一个带有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)

但是没有理由在代码中设置todoshungry属性.在typescript/react中只调用一个属性的正确方法是什么?

typescript reactjs

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

使用"/"时没有(Fractional Int)的实例

我是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)

haskell

41
推荐指数
2
解决办法
3万
查看次数

CURRENT_TIMESTAMP和GETDATE()之间的区别

CURRENT_TIMESTAMPGETDATE()SQL Server有什么区别?

SELECT CURRENT_TIMESTAMP, GETDATE()
Run Code Online (Sandbox Code Playgroud)

sql-server ansi-sql

32
推荐指数
1
解决办法
2万
查看次数

捕获并移动c ++ 14 lambda表达式中的unique_ptr

我正在以这种方式捕获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)

c++ lambda c++11 c++14

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

Haskell在多大程度上懒惰?

我需要对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)

haskell lazy-evaluation

28
推荐指数
4
解决办法
2807
查看次数

简洁可以节省哪些错误?

"C++ Primer"(第5版)建议在第149页上,简短的代码比较长的替代方案更不容易出错.它将以下代码行作为示例:

cout << *iter++ << endl;
Run Code Online (Sandbox Code Playgroud)

它声称上述行比其他行更不容易出错:

cout << *iter << endl;
++iter;
Run Code Online (Sandbox Code Playgroud)

对我来说,即使含义*iter++很明确,这个表达式仍然需要非零的心理努力来解析,因此第二个版本更具可读性.所以,我想理解:第二个版本更容易出错?

c++

25
推荐指数
3
解决办法
1546
查看次数

从TypeScript声明全局命名空间变量

如何从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关键字可用或在计划中?

meteor typescript

24
推荐指数
1
解决办法
2万
查看次数

JVM如何在内部处理竞争条件?

如果多个线程尝试更新相同的成员变量,则称其为竞争条件.但是我更感兴趣的是,如果我们不通过使它同步或其他东西在我们的代码中处理它,JVM如何在内部处理它?它会挂起我的程序吗?JVM将如何应对?我认为JVM会暂时为这种情况创建一个同步块,但我不确定究竟会发生什么.

如果你们中的任何人有一些见解,那么最好知道.

java multithreading jvm race-condition

24
推荐指数
2
解决办法
1667
查看次数

C#列表定义,括号与花括号

我刚刚注意到,当你List在c#中声明一个时,你可以在最后添加括号或花括号.

List<string> myList = new List<string>();
List<string> myList2 = new List<string>{};
Run Code Online (Sandbox Code Playgroud)

这两个列表似乎都具有相同的功能.用括号或花括号声明它们是否有任何实际差异?

c# list

23
推荐指数
3
解决办法
5297
查看次数

向printf()添加换行符会改变代码行为

出于某种原因,加入\nprintf()改变的下面的代码的行为.没有\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)

我很想知道这背后的原因.

c linux printf

23
推荐指数
2
解决办法
2495
查看次数