小编Oli*_*ini的帖子

等待但从未解决/拒绝的承诺内存使用情况

await荷兰国际集团一个Promise既不做出决议也不废品(从未结算/未实现)引起了内存泄漏?

当我看到带有更高/令人敬畏的反跳承诺的 React钩子时,我对此感到好奇,该钩子创建了新的承诺,但只解决了最后一个,因此使很多/大多数人不安/未实现。

javascript async-await es6-promise

27
推荐指数
2
解决办法
498
查看次数

补充高阶函数

我正在尝试编写一个补充函数,以便在提供一个函数时f,它返回一个函数,在提供与相同的输入时f,它返回逻辑上相反的函数。

将类似的代码放入VS2017中后,我没有出现任何错误,但是我尚无法运行代码以查看其是否能按预期工作。我的意图是先在一个repl中尝试一下,看看它是否会按预期进行。我在那里使用的代码是这样的:

   public static Func<T, bool> Complement<T>(Func<T, bool> f)
   {
       return (T x) => !f(x);
   }

   public static bool GreaterThanTwo (int x) {
     return x > 2;
   }

   static public void Main(string[] args)
   {
     Func<int, bool> NotGreaterThanTwo = Complement(GreaterThanTwo);
     Console.WriteLine(NotGreaterThanTwo(1));
   }
Run Code Online (Sandbox Code Playgroud)

这是相同的链接。

在REPL中,出现错误:

main.cs(17,42):错误CS0411:无法从用法中推断方法`MainClass.Complement(System.Func)'的类型参数。尝试明确指定类型参数编译失败:1错误,0警告编译器退出状态1

我看了一些关于堆栈溢出的问题,这些问题涵盖了相同的错误消息,例如thisthis,但是我看不到它们与我遇到的这个问题有什么关系。

c#

11
推荐指数
2
解决办法
321
查看次数

渐进式 Web 应用程序是否需要 Service Worker?

并非所有浏览器都支持Service Worker ;caniuse 估计它们适用于大约 85% 的用户。

如果我构建了一个 PWA,它需要使用 Service Worker 吗?

javascript progressive-web-apps

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

将数组扩展为打字稿中的参数

我有一个数组数组,我想将每个数组用作函数的参数,例如,在javascript中,它可能看起来像:

const args = [
    [1, 'a'],
    [2, 'b'],
];

const concatter = (first, second) => `${first}-${second}`;

const test = args.map(a => concatter(...a));
console.dir(test);
Run Code Online (Sandbox Code Playgroud)

我在打字稿中尝试过类似的操作,但是在使其工作时遇到了问题。这里是操场的链接。代码如下:

const args = [
    [1, 'a'],
    [2, 'b'],
];

const concatter = (first: number, second: string) => `${first}-${second}`;

const singleTest = concatter(...args[0]);
const test = args.map(a => concatter(...a));
Run Code Online (Sandbox Code Playgroud)

但是与此有关,concatter显示错误的调用:

Expected 2 arguments, but got 0 or more.

似乎我在这里犯了一个相当基本的错误,但我尚未能够找到有关可能是什么的任何信息。

typescript

5
推荐指数
1
解决办法
117
查看次数

定义一种交替对的类型

从这个问题如何在 TypeScript 中定义具有交替类型的数组?,我发现可以定义一种数组类型,其中类型必须始终按以下顺序对 Alternating<T, U> 有效:

[]
[T]
[T, U]
[T, U, T]
[T, U, T, U]
Run Code Online (Sandbox Code Playgroud)

加上任意长度的项目,前提是它们的顺序使得类型 U 的元素始终位于类型 T 的元素之后。

但类型定义有点复杂,因此我想避免它 - 我的用例有点不同,我只想让以下内容在类型系统中有效:

[T, U]
[T, U, T, U]
Run Code Online (Sandbox Code Playgroud)

最多为任意长度的数组,前提是所有值都存在于 T、U 配对中 - 没有空数组,没有“悬空”T。

这可能吗?我曾想过尝试这样的事情:

type AlternatingPairs<A, B> = [A, B, ...AlternatingPairs<A, B>];
Run Code Online (Sandbox Code Playgroud)

在我意识到在打字稿中不能以这种方式进行循环引用之前。

typescript typescript-generics

5
推荐指数
1
解决办法
712
查看次数

如何读取do块中的文件

我正在学习 Haskell,并试图弄清楚为什么我在以下代码中遇到错误。我正在尝试定义一个函数,该函数可以读取给定位置的文件,并对其执行一些函数,但它有一个错误,恐怕我无法理解。

我想我正在做一些愚蠢的事情,但我不知道是什么;有人可以告诉我吗?

readAndProcessFile ::  String -> (String -> a) -> a
readAndProcessFile l f = do
    contents <- readFile l -- error here
    let result = f contents
    return result
Run Code Online (Sandbox Code Playgroud)

我收到错误:


发生检查:无法构造无限类型:a ~ IO a

在 'do' 块的 stmt 中:contents <- readFile l

在表达式中:

do contents <- readFile l
   let result = (f contents)
   return result
Run Code Online (Sandbox Code Playgroud)

在“readAndProcessFile”的等式中:

  readAndProcessFile l f
    = do contents <- readFile l
         let result = ...
         return result
Run Code Online (Sandbox Code Playgroud)

• 相关绑定包括

f :: String -> a …
Run Code Online (Sandbox Code Playgroud)

haskell

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

重新映射类型中的键

我想创建一个 type ( ) ,它将被定义为具有扩展的U某些给定类型的键。这个新类型的值将被定义为函数,该函数将采用原始类型上该键的值类型并返回相同的类型。TTObjectT

例如,如果我有以下类型I1

interface I1 {
  a: number;
  b: Date;
}
Run Code Online (Sandbox Code Playgroud)

那么就U<I1>等于:

{
  a: (x: number) => number;
  b: (x: Date) => Date;
}
Run Code Online (Sandbox Code Playgroud)

我确实看过一些类似的选项keyof,但我还没有弄清楚如何最好地做到这一点。我尝试过,例如:

export type U<T extends {}, K extends keyof T, V extends T[K]> = Record<K, (x: V) => V>;
Run Code Online (Sandbox Code Playgroud)

但是您需要为每个泛型定义显式类型。似乎可以使用key remapping来重新映射 ts 4 中的键,但现在我被困在 3.7.1 上。

关于如何实现这一目标有什么想法吗?

typescript

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

如何使switch语句更有效?

我有以下代码

//var r, t, y, f, g, h, c, v, b
    switch(event.key) {
        case 'r' : input.execute("game_stats_build " + r);
        break;
        case 't': input.execute("game_stats_build " + t);
        break;
        case 'y': input.execute("game_stats_build " + y);
        break;
        case 'f': input.execute("game_stats_build " + f);
        break;
        case 'g': input.execute("game_stats_build " + g);
        break;
        case 'h': input.execute("game_stats_build " + h);
        break;
        case 'v': input.execute("game_stats_build " + v);
        break;
        case 'b': input.execute("game_stats_build " + b);
        break;
      }
Run Code Online (Sandbox Code Playgroud)

这是多余的,每次我做出改变,我都要做很多打字.我怎么能写得更好?

javascript

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

Injecting value in middle of function

If I want to define a function that filters a set matching on a given value, I can write:

const { filter, equals} = R

const data = [1, 2, 3, 4, 5]

const filterDataFor = x => filter(equals(x), data);

console.log(filterDataFor(2))
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
Run Code Online (Sandbox Code Playgroud)

I thought that I might also be able to write this in the form of:

const { filter, equals, __ } = R

const data = [1, 2, 3, 4, 5]

const filterDataFor = filter(equals(__), data)

console.log(filterDataFor(2)) …
Run Code Online (Sandbox Code Playgroud)

javascript ramda.js

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

是否存在非并发包

有没有非并发包这种东西?我看到很多提到 的内容ConcurrentBag,但没有看到任何关于 的内容Bag

存在这样的集合吗?

为了澄清为什么我想使用这样的集合,我经常发现集合的顺序变得重要但可能难以跟踪集合的属性。

我不一定说这种情况经常发生在良好、设计良好的代码中,但在某些情况下,我希望我可以说“不要期望此集合有任何订单,而是在需要时专门订购它”。

c#

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