谁能告诉Adobe Acrobat 9是如何制作的?我喜欢GUI的外观和感觉,我很好奇它是如何制作的.具体来说,使用了什么编程语言来实现它?
1)什么是int?它有什么不同struct System.Int32吗?我知道前者是CLR类型的C#别名(typedef或#define等价物)System.Int32.这种理解是否正确?
2)当我们说:
IComparable x = 10;
Run Code Online (Sandbox Code Playgroud)
这就像说:
IComparable x = new System.Int32();
Run Code Online (Sandbox Code Playgroud)
但我们不能new一个结构,对吗?
或者在C语法中:
struct System.In32 *x;
x=>someThing = 10;
Run Code Online (Sandbox Code Playgroud)
3)什么是String一个大写的小号?我在Reflector中看到它是sealed String类,当然,它是一个引用类型,与System.Int32上面不同,它是一个值类型.
string然而,什么是非资本化的?这也是这个类的C#别名吗?
为什么我在Reflector中看不到别名定义?
4)如果你愿意,试着跟着我这个微妙的思路.我们知道特定类型的存储位置只能访问其接口上的属性和成员.这意味着:
Person p = new Customer();
p.Name = "Water Cooler v2"; // legal because as Name is defined on Person.
Run Code Online (Sandbox Code Playgroud)
但
// illegal without an explicit cast even though the backing
// store is …Run Code Online (Sandbox Code Playgroud) 这有效:
#include<cstdio>
class A{
public:
A(int a):var(a){}
int var;
};
int f(A obj) {
return obj.var;
}
int main() {
std::cout<<f(23); // output: 23
return 0;
}
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
#include<cstdio>
class A{
public:
A(int a, int b):var1(a), var2(b){}
int var1, var2;
};
int f(A obj) {
return (obj.var1 + obj.var2);
}
int main() {
cout<<f(22, 23); // error: conversion from 'int' to
// non-scalar type 'A' requested
return 0;
}
Run Code Online (Sandbox Code Playgroud)
第二段代码不起作用,但我找不到足够好的理由.对我来说,代码看起来太奇怪了.
但是在这种情况下只允许一次隐式转换的实际原因是什么?它是一个像这样唯一的语言功能吗?
假设我们有2个表,a和b:
CREATE TABLE a (id_a INT NOT NULL PRIMARY KEY, id_b INT NOT NULL)
INDEX fk_id_b (id_b ASC),
CONSTRAINT fk_id_b FOREIGN KEY (id_b)
REFERENCES b (id_b);
CREATE TABLE b (id_b INT NOT NULL PRIMARY KEY, b_data INT NOT NULL);Run Code Online (Sandbox Code Playgroud)
所以a有以下列:id_a和id_b,其中id_b是bs 的外键id_b.当我想从a获取关联的b_data时,我必须进行连接:
SELECT id_a, b_data FROM a JOIN b ON a.id_b=b.id_b;Run Code Online (Sandbox Code Playgroud)
它工作正常,但它很长,我重复自己(我不应该根据红宝石家伙),所以我想到了一种方法,使这个查询更短,更容易理解,仍然是明确的:
SELECT id_a, id_b->b_data FROM a;Run Code Online (Sandbox Code Playgroud)
foreign_key->column 就像指向结构的指针一样,数据库会自动加入所需的表.
我知道这不存在,将其作为标准可能需要花费很多时间才能在生产就绪的数据库系统中看到它并且有些人不希望它"看起来很奇怪",但我会至少想知道,如果有可能,如果没有,为什么.
我理解他们之间的区别,但我无法理解为什么他们都被包含在语言中.当然两者都会造成混乱?
从
3)[...]输入迭代器的算法绝不应该尝试两次通过相同的迭代器.它们应该是单通道算法.[...]
这个IMO限制了一些相当直接的优化(例如通过容器一次以查看它有多少元素) - 唉,动机超出了问题的范围.
为什么这个要求?
想知道为什么我们应该指定该async方法确实返回Task对象.
指定它似乎是多余的async关键字加上它是混乱,因为你没有真正创建Task对象.
据我所知,编译器会为Task对象创建发出必要的代码(无论是在等待调用还是用新任务包装返回).
我真的不喜欢声明类型和返回类型之间的不一致.
我的问题很简单,也许很愚蠢.::当我们通过访问struct和class成员时,通过C++ 访问枚举成员背后的设计决策是什么.
int main()
{
unsigned int a = 0;
unsigned int b = 0;
a ^= b; // ok
a |= b; // ok
a &= b; // ok
a = ~b; // ok
a ~= b; // error : expected ';' after expression
}
Run Code Online (Sandbox Code Playgroud)
^=,|=并且&=都是合法的.
为什么~=C++中不合法?
我正在学习CompletableFutures.
我不是在问和之间的区别thenApply()thenCompose().相反,我想问一下感觉不对的代码"气味",以及实际可能证明它的理由.
从CompletableFuture我到目前为止看到的用法来看,似乎你从来没有这样:
CompletableFuture<String> foo = getSomething().thenApply((result) -> { ... });
Run Code Online (Sandbox Code Playgroud)
这不是:
String foo = getSomething().thenCompose((result) -> { ... });
Run Code Online (Sandbox Code Playgroud)
要返回未来,您必须使用thenCompose(),否则thenApply().
然而,从经验来看,语言并没有设法消除每次都做出这种明确的选择,这似乎很奇怪.例如,是否有一个单一的方法,thenDo()其返回类型是从returnlambda中推断出来的(在编译期间)?它可能然后被给予thenApply或thenCompose在编译时般的性能以及.
但我确信有一个很好的理由采用不同的方法,所以我想知道原因.
是因为在Java中从lambda推断返回类型是危险还是不可能?(我也是Java的新手.)
是不是因为有一种情况,单个方法确实不明确,唯一的解决方案是使用单独的方法?(我想象可能,嵌套CompletableFuture或复杂的界面和泛型.)如果是这样,有人可以提供一个明确的例子吗?
是出于其他原因还是有记录的推荐?
language-design ×10
c++ ×4
c# ×2
operators ×2
acrobat ×1
asynchronous ×1
clr ×1
constructor ×1
enums ×1
foreign-keys ×1
iterator ×1
java ×1
lambda ×1
return-type ×1
ruby ×1
sql ×1
syntax ×1