小编Sta*_*kop的帖子

在TypeScript中动态导入模块

什么是动态加载模块的TypeScript方式(模块的路径在运行时已知)?我试过这个:

var x = "someplace"
import a = module(x)
Run Code Online (Sandbox Code Playgroud)

但似乎TypeScript编译器希望在编译时将路径视为导入/模块中的字符串:

$ tsc test.ts 
/tmp/test.ts(2,19): error TS1003: Identifier expected.
/tmp/test.ts(2,20): error TS1005: ';' expected.
Run Code Online (Sandbox Code Playgroud)

我知道我可以直接使用RequireJS(如果我使用amd模块格式),但这对我来说感觉不对 - 它是一个特定库的解决方案.

import module typescript

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

无法推断出Action <T>中的类型参数,但是可以从Func <T>中推断出来

我一直在玩仿制药和代表,我发现了一些我不理解的东西.我有非常相似的通用静态方法,一个接受Action<T>,第二个接受Func<T>.现在的问题是:如果我在Func<T>没有显式类型的情况下调用那个接受,编译器就可以了.但是接受Action<T>我的程序的人无法编译(请参阅错误消息的代码).

我的问题是:为什么编译器能够识别返回类型,但是无法识别参数类型?

public interface IMessage
{ }

public class Message : IMessage
{
}
Run Code Online (Sandbox Code Playgroud)
static void HandleAction<TMessage>(Action<TMessage> action)
    where TMessage : IMessage
{ }

static void HandleFunction<TMessage>(Func<TMessage> action)
    where TMessage : IMessage
{ }

static void A(Message message)
{ }

static Message F()
{
    return new Message();
}

static void Main(string[] args)
{
    // this one is ok
    HandleFunction(F);

    // compiler error:
    // The type arguments for method
    // 'template_test.Program.HandleAction<TMessage>(System.Action<TMessage>)' 
    // cannot …
Run Code Online (Sandbox Code Playgroud)

c# generics delegates

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

pytest:从代码而不是从命令行运行测试

是否可以使用pytest从代码运行测试?我确实找到了pytest.main,但这只是代码中提供的命令行界面。我想通过代码传递测试类/函数。

在单元测试中,可能是这样的:

from unittest import TestLoader, TestCase, TestResult


class TestMy(TestCase):
    def test_silly(self):
        assert False

runner = TestLoader()
test_suite = runner.loadTestsFromTestCase(TestMy)
test_result = TestResult()
test_suite.run(test_result)
print(test_result)
Run Code Online (Sandbox Code Playgroud)

python unit-testing pytest python-3.x

6
推荐指数
1
解决办法
584
查看次数

Rayon 和 Faster 可以结合使用吗?

Rayon非常适合集合的算法并行化,而Faster非常适合 x86 平台上的矢量化 (SIMD),例如Vec<f32>. 我试图将它们结合起来,迭代器似乎并不喜欢彼此。有没有办法将这两个库用于可以从向量化和并行化中受益的算法?像 Faster 示例中的这个:

let lots_of_3s = (&[-123.456f32; 128][..]).iter()
    .map(|v| {
        9.0 * v.abs().sqrt().sqrt().recip().ceil().sqrt() - 4.0 - 2.0
    })
    .collect::<Vec<f32>>();
Run Code Online (Sandbox Code Playgroud)

parallel-processing simd rust rayon

6
推荐指数
1
解决办法
764
查看次数