我看到一些观点认为 Rust 和 M# 可能会选择编译时反射,因为运行时反射代价高昂并且会增加二进制文件的大小。到目前为止我找不到任何好的比较,只是一些认为运行时反射“很少是个好主意”的观点。似乎探索内置编译时反射概念的语言都还在发展中。
到目前为止我读过的资料:
- http://joeduffyblog.com/2013/12/27/csharp-for-systems-programming
- http://blogs.msdn.com/b/ericlippert/archive/2009/05/21/in-foof-we-trust-a-dialogue.aspx
- Is Reflection possible in Rust, and if so how can I invoke an unknown function with some arguments?
- http://www.reddit.com/r/rust/comments/1xck76/a_case_for_reflection_in_rust
最佳答案
这是一些 Ruby:
m = STDIN.gets.chomp
puts Object.respond_to?(m)
在编译时真的不可能做到这一点。我的意思是,用 CTFE ,您可以技术上在编译时运行此代码,但作为正在运行的程序的一部分,它不会真正起作用。
另一个有趣的:
$m = STDIN.gets.chomp
class Object
define_method $m do
puts "zomg"
end
end
class Foo; end
Foo.new.send($m)
这会打印“zomg”。
关于reflection - 运行时反射能做什么编译时不能做的事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107233/