小编dje*_*lin的帖子

Typescript - 如何检查给定值是否在联合类型数组中

我有一个给定的联合类型的数组,然后想检查数组中是否包含来自联合类型的超集的字符串(运行时检查):

const validOptions: ("foo" | "bar")[] = ["foo", "bar"]
type IArrType = typeof validOptions[number]
const key: IArrType | "alien" = "alien" // Rather: some random function
const isKeyInArr = validOptions.indexOf(key) > -1 // Error: "alien" is not assignable to "foo" | "bar"

// Fix 1:
const isKeyValidCast = validOptions.indexOf(<IArrType>key) > -1 
// Fix 2:
const isKeyValidExplicit = 
      key === "alien" ? false : validOptions.indexOf(key) > -1 // OK: type guard magic
Run Code Online (Sandbox Code Playgroud)

修复1可以,但不是很优雅.修复2愚弄编译器,但是误导和低效的运行时.在我的例子中,"外来"字符串类型只是不在联合类型中的任何字符串的占位符.

有没有什么方法可以在没有强制转换或显式测试的情况下编译?表达式可以否定,以便我们让这个"类型后卫"起作用吗?

顺便说一句:这个非常酷的答案展示了如何从值列表构造一个类型化的元组:Typescript从元组/数组值派生联合类型

typescript

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

OpenSSL配置最大连接数

我的应用程序在内部进行segfault之前保持950-970个SSL连接SSL_read.是否可以将OpenSSL配置为接受比此更多的连接?

我已经将它编程为在获取它们之后不对连接做任何事情,所以我知道这是打开连接的#函数,而不是当前正在读/写的连接数或时间.

更新:

  • ubuntu在同一个地方出现相同的错误.我正在努力开发ubuntu.
  • 如果我在相同的连接数下将机器大小(RAM,交换,CPU)加倍,则会出现相同的错误.
  • 上下文不为空.
  • ulimit -n设置为4096.我通过设置验证了这一点,ulimit -100在这种情况下观察到不同的错误.
  • 即使线程被合并,也会出现问题.无论是1个线程/连接还是1个线程/ 10个连接,问题都发生在相同数量的连接上.

我正在尝试从源代码构建OpenSSL并启用调试选项.我开始怀疑这是否需要几个小时或告诉我任何有用的东西.我在这里有一个问题.

我已经确定在openssl v 1.0.1.c中这行发生了段错误:

ssl_lib.c:968

968     return(s->method->ssl_read(s,buf,num));
Run Code Online (Sandbox Code Playgroud)

此外,我已经确定这不是ssl_read函数内部的segfaulting (应该指向ssl3_read).成员ssl_readmethod实际上是无效的本身和它出现method本身也是无效的(我的基础上推断这个"奇怪的看的地址.")

c c++ openssl

8
推荐指数
1
解决办法
1075
查看次数

C如何将静态函数的使用仅限于其文件?

我知道C中的静态函数允许只在该文件的范围内调用该特定函数.我感兴趣的是这是怎么发生的.它是放在内存的特定部分还是编译器对该函数应用特定操作.可以将相同的过程应用于汇编中的函数调用吗?

c assembly

8
推荐指数
3
解决办法
983
查看次数

指定缺少的图像图标

可能重复:
jQuery/Javascript替换损坏的图像

这应该很容易我只是不知道用谷歌搜索的术语.我认为这是HTML/CSS,如果图像链接被破坏,它通常会显示缺少的图像图标,显示带有红色,绿色,蓝色形状的页面.在HTML中,是否可以配置"如果图像链接断开则使用此图像?"

html css image

8
推荐指数
2
解决办法
4049
查看次数

logback在appender中打印完整的MDC

在a中的appender中logback.xml是否可以执行任何操作,例如迭代MDC,打印整个MDC等等?我能想到的最简单的方法是基本上通过java/groovy代码(我还没有研究过怎么做),想知道是否有简写.

java logback mdc

8
推荐指数
2
解决办法
3084
查看次数

为什么在main中重新声明一个函数?

一些例子我遇到一个处理菜单的程序..

他在main函数之前声明了所有函数,因为我理解应该是,然后在main中也提到了一个函数,它是一个void函数:

char get_choice(void);
char get_first(void);
int get_int(void);
void count(void);
int main(void)
{
    int choice;
    void count(void);
    while ( (choice = get_choice()) != 'q')
    {
        switch (choice)
        {
            case 'a' : printf("Buy low, sell high.\n");
                break;
            case 'b' : putchar('\a'); /* ANSI */
                break;
            case 'c' : count();
                break;
            default : printf("Program error!\n");
                break;
        }
    }
    printf("Bye.\n");
Run Code Online (Sandbox Code Playgroud)

......(功能实现)

你能告诉我为什么吗?TNX

c

8
推荐指数
2
解决办法
197
查看次数

自动重新连接RabbitMQ频道

我找到了这个宝石:

如果连接失败,客户端将需要与代理建立新连接.在先前连接上打开的任何频道都将自动关闭,这些频道也需要重新打开.

所以这不好.我即将编写一大堆处理自动重新连接并重新创建通道,然后从我的所有代码中封装这种情况.问题是,这应该已经完成​​了.这可能在Java RMQ库中吗?

java rabbitmq

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

C中的Typesafe枚举?

如果我有多个enum,例如:

 enum Greetings{ hello, bye, how };

 enum Testing { one, two, three };
Run Code Online (Sandbox Code Playgroud)

如何强制使用正确的enum?例如,我不希望有人hello在他们应该使用时使用它们以one获得更好的调试和可读性.

c enums

7
推荐指数
2
解决办法
2706
查看次数

为什么typeof val ==='object'&& val.constructor ===如果val在其他框架中创建,则数组失败?

在JavaScript中引用Crockford好的部分:

我们可以...定义我们自己的is_array函数:

var is_array = function (value) {
    return value && typeof value === 'object' && value.constructor === Array;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,它无法识别在不同的Windows或框架中构建的数组.

然后他没有解释原因.所以!为什么?

javascript arrays typeof

7
推荐指数
0
解决办法
308
查看次数

正在处理MySQL异常处理程序访问异常

我正在尝试回滚错误,但仍然让客户端收到错误.除非有一种方法可以在异常处理程序中访问错误,否则这实际上可能是不可能的.

可以从异常中"抛出",即可以发出信号:

CREATE PROCEDURE p ()
BEGIN
  DECLARE EXIT HANDLER FOR SQLEXCEPTION
  BEGIN
    SIGNAL SQLSTATE VALUE '99999'
      SET MESSAGE_TEXT = 'An error occurred';
  END;
  DROP TABLE no_such_table;
END;
Run Code Online (Sandbox Code Playgroud)

但是这个来自MySQL doc的示例代码看起来很糟糕,因为它实际上吞噬了所有错误并将它们合并为一个.

SHOW ERRORS似乎相关,但我没有看到任何方式以编程方式使用它,例如SELECT Code FROM (SHOW ERRORS);是不可能的.

这可能吗?有没有更好的做法,我完全错过了?

mysql signals exception-handling

7
推荐指数
1
解决办法
4698
查看次数