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 - 询问您实际要解决的问题,可能会有解决方案。
在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 - 询问您实际要解决的问题,可能会有解决方案。