Ruby 的 public_send 方法有什么等价物吗?

Any equivalent of Ruby's public_send method?

在Ruby中,构造一个方法名并将其发送给一个对象,可以这样做:

class Foo
  def foo
    "FOO"
  end
end

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

Crystal 的等效技术是什么?

crystal 中没有对应项。 Crystal 是一种静态类型和静态编译的语言。我们没有发送或评估功能。

根据您遇到的导致您首先使用 send 的问题,您也许可以使用 macros。在 crystal 中没有发送的替代品,只有一堆工具可以使一些动态行为静态建模。

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

Crystal 对动态的替代是对 macros 的支持——但它们并不相同,您不应该期望它们以相同的方式工作。

具体来说,您不能使用宏来选择在运行时要调用的方法 - 在Crystal中您不能那样做,完全没有。

但您的问题可能是 XY problem - 询问您实际要解决的问题,可能会有解决方案。