小编Jos*_*art的帖子

为什么我必须明确地转换为约束类型?

为什么bar下面注释掉的代码没有编译,即使foo并且baz做到了?

use std::any::Any;
use std::fmt::Display;

// `value` implements `Clone`, so I can call `.clone()`.
fn foo<T: Display + Clone>(value: &T) {
    println!("{}", value.clone());
}

// `value` implements `Any`, so I should be able to call `.downcast_ref`...
// But this doesn't compile!
//
// fn bar<T: Display + Any>(value: &T) {
//     println!("{}", value.downcast_ref::<i32>());
// }

// For some reason I have to do an explicit cast to `&Any`...
fn baz<T: Display + Any>(value: &T) …
Run Code Online (Sandbox Code Playgroud)

rust

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

如何从Bazel中的另一个规则中创建规则

情况

我有两个Skylark扩展规则:blah_libraryblah_binary。所有blah_library的传递依赖关系都通过返回传播,provider(transitive_deps=...)并由任何最终依赖blah_binary目标进行适当处理。

我想做的事

我希望每个blah_library人也创建一个filegroup具有上述所有传递性依赖项的,以便我可以分别访问它们。例如,我希望能够将它们作为数据依赖项传递给cc_binary。换一种说法:

# Somehow have this automatically create a target named `foo__trans_deps`?
blah_library(
    name = "foo",
    srcs = [...],
    deps = [...],
)

cc_binary(
    ...,
    data = [":foo__trans_deps"],
)
Run Code Online (Sandbox Code Playgroud)

我应该怎么做?任何帮助,将不胜感激!

我尝试过的

制作宏

我试图像这样制作一个宏:

_real_blah_library = rule(...)

def blah_library(name, *args, **kwargs):
    native.filegroup(
        name = name + "__trans_deps",
        srcs = ???,
    )
    _real_blah_library(name=name, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

但是我不确定如何从宏中访问providerby _real_blah_library,因此我不知道如何填充filegroupsrcs字段... …

bazel

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

标签 统计

bazel ×1

rust ×1