在Ruby中,要构建方法的名称并将其发送给对象,可以这样做:
class Foo
def foo
"FOO"
end
end
Foo.new.public_send(:foo) # => "FOO"
Foo.new.public_send("foo") # => "FOO"
什么是Crystal的等效技术?
答案 0 :(得分:2)
水晶中没有等价物。 Crystal是一种静态类型和静态编译的语言。我们没有发送或评估功能。
根据您在一开始就达到发送的问题,您可以使用macros。晶体发送没有一个替代品,只有一堆工具可以静态建模一些动态行为。
答案 1 :(得分:2)
你应该记住,与Ruby不同,Crystal是一种编译的,静态类型的语言,因此Ruby的动态特性不能很好地映射到它。
Crystal对动态的替代是对macros的支持 - 但它们并不相同,你不应指望它们以相同的方式工作。
具体来说,您不能使用宏来在运行时选择 要调用的方法 - 在Crystal中你根本不能那样做。
但你的问题可能是XY problem - 问你实际想要解决的问题,并且可能有解决方案。