为什么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) 我有两个Skylark扩展规则:blah_library和blah_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,因此我不知道如何填充filegroup的srcs字段... …