在反应选择中我偶然发现了这条线
export type SelectComponentsProps = { [key in string]: any };
Run Code Online (Sandbox Code Playgroud)
我从 这里 知道
type Keys = 'option1' | 'option2';
type Flags = { [K in Keys]: boolean };
Run Code Online (Sandbox Code Playgroud)
相当于
type Flags = {
option1: boolean;
option2: boolean;
}
Run Code Online (Sandbox Code Playgroud)
我也从
这里知道
会{ [key: string]: boolean; };对此感到满意:
let map : { [key: string]: boolean} = {};
map["foo"] = true;
map["bar"] = false;
map["foobar"] = "foo"; // Throws exception
map[1] = true; // Curiously doesn't throws exception …Run Code Online (Sandbox Code Playgroud) int *i = new int(1);
cout << i << endl;
Run Code Online (Sandbox Code Playgroud)
将打印整数的地址.
char *c="cstring";
cout << c << endl;
cout << &(*c) << endl;
Run Code Online (Sandbox Code Playgroud)
两者都会打印"cstring".我想这个行为可以简单地通过ostream& operator<< (ostream& out, const char* s );IOstream库中的实现来解释.
但是,如果你真的想要打印数据c的地址怎么办呢?
下面的代码是我为说明我的问题而编写的一个最小示例。我认为这比我试图用语言解释情况更有用。
我还删除了对 WPF、ICommand、IDisposable 等的所有引用,因为我不想阻止有人问我“为什么不直接使用 Prism 或其他一些随机库?!”
我问问题是因为我想更多地了解这门语言,但在现实生活中却没有人可以交谈。
public interface IRedDependency { }
public interface IBlueDependency { }
public interface IExecutable {
public void Execute();
}
public interface IStoppable {
public void Stop();
}
public class RedExecutable : IExecutable, IStoppable {
public RedExecutable(IRedDependency redDependency) { }
public void Execute() { }
public void Stop() { }
}
public class BlueExecutable : IExecutable, IStoppable {
public BlueExecutable(IBlueDependency blueDependency) { }
public void Execute() { }
public void Stop() { }
}
public …Run Code Online (Sandbox Code Playgroud) 我尝试了以下方法:
if(int i=6+4==10)
cout << "works!" << i;
if(int i=6+4,i==10)
cout << "doesn't even compile" << i;
Run Code Online (Sandbox Code Playgroud)
第一个工作正常,而第二个不编译.为什么是这样?
编辑:现在我知道第一个可能无法正常工作.if范围内的i值将为1,而不是10.(正如此问题的其中一条评论所指出的那样).
那么有没有办法在if语句中同时初始化和使用变量for(int i=0;i<10;i++)?这样你就可以产生类似if((int i=6+4)==10)(不会编译)的东西,其中if范围内的I值为10?我知道你可以在if语句之前声明并初始化我,但有没有办法在语句本身内执行此操作?
为了让你知道为什么我觉得这会有用.
if(int v1=someObject1.getValue(), int v2=someObject2.getValue(), v1!=v2)
{
//v1 and v2 are visible in this scope
//and can be used for further calculation without the need to call
//someObject1.getValue() und someObject2.getValue() again.
}
//if v1==v2 there is nothing to be done which is why v1 und v2
//only need to be visible in the scope …Run Code Online (Sandbox Code Playgroud)