reflection - 运行时反射能做什么编译时不能做的事情?

标签 reflection runtime introspection rust compile-time

我看到一些观点认为 Rust 和 M# 可能会选择编译时反射,因为运行时反射代价高昂并且会增加二进制文件的大小。到目前为止我找不到任何好的比较,只是一些认为运行时反射“很少是个好主意”的观点。似乎探索内置编译时反射概念的语言都还在发展中。

到目前为止我读过的资料:

最佳答案

这是一些 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/

相关文章:

java - 如何知道方法是否使用反射将数组作为参数

java - Powershell 打开窗口(来自 Java.Runtime.exec)

python - 重写 python 函数而不使用检查模块

objective-c - 检查 Objective-C block 类型?

c# - .NET 反射 : how to get properties defined on partial class

c# - 如何获取在 Unity 中注入(inject)的对象的类型?

c# - 使用不带反射的字符串获取属性

c# - 你能在运行时使用 C# 实例化模板类吗

c - 需要帮助追踪运行时检查失败 #2 - 变量 'list' 周围的堆栈已损坏

ruby - 用代理对象愚弄 Ruby 的 case 运算符 ===