任何相当于Ruby的public_send方法?

时间:2018-01-30 12:25:33

标签: metaprogramming crystal-lang

在Ruby中,要构建方法的名称并将其发送给对象,可以这样做:

class Foo
  def foo
    "FOO"
  end
end

Foo.new.public_send(:foo)  # => "FOO"
Foo.new.public_send("foo") # => "FOO"

什么是Crystal的等效技术?

2 个答案:

答案 0 :(得分:2)

水晶中没有等价物。 Crystal是一种静态类型和静态编译的语言。我们没有发送或评估功能。

根据您在一开始就达到发送的问题,您可以使用macros。晶体发送没有一个替代品,只有一堆工具可以静态建模一些动态行为。

答案 1 :(得分:2)

你应该记住,与Ruby不同,Crystal是一种编译的,静态类型的语言,因此Ruby的动态特性不能很好地映射到它。

Crystal对动态的替代是对macros的支持 - 但它们并不相同,你不应指望它们以相同的方式工作。

具体来说,您不能使用宏来在运行时选择 要调用的方法 - 在Crystal中你根本不能那样做

但你的问题可能是XY problem - 问你实际想要解决的问题,并且可能有解决方案。