在 Ruby / Rails 中动态定义方法 - 如何设置参数?

发布于 2024-09-16 11:41:07 字数 391 浏览 11 评论 0原文

我试图定义一组可以传递给定参数的函数。

例如,我该如何执行以下操作?

>> get_1_type("xxx")

V4_RELATIONSHIP_TYPES=[1=>2,3=>4]

V4_RELATIONSHIP_TYPES.keys.each do |key|
 self.class.send(:define_method, "get_#{key}_type".downcase) do
  return GuidInfo.get_or_new(PARAMS, V4_RELATIONSHIP_TYPES[key])
 end
end

# i can call -> get_1_type("xxx") , and get the function called

I am trying to define a set of functions where I can pass in given params.

for example, how do i do the following?

>> get_1_type("xxx")

V4_RELATIONSHIP_TYPES=[1=>2,3=>4]

V4_RELATIONSHIP_TYPES.keys.each do |key|
 self.class.send(:define_method, "get_#{key}_type".downcase) do
  return GuidInfo.get_or_new(PARAMS, V4_RELATIONSHIP_TYPES[key])
 end
end

# i can call -> get_1_type("xxx") , and get the function called

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

似狗非友 2024-09-23 11:41:07

试试这个:

V4_RELATIONSHIP_TYPES.keys.each do |key|
 self.class.send(:define_method, "get_#{key}_type".downcase) do |param|
  # use param
  return GuidInfo.get_or_new(PARAMS, V4_RELATIONSHIP_TYPES[key])
 end
end

现在您可以使用参数调用该方法:

get_1_type("xxx")

编辑 1

有关 Ruby 块的一些链接:

从这个开始

链接 1

链接 2

Try this:

V4_RELATIONSHIP_TYPES.keys.each do |key|
 self.class.send(:define_method, "get_#{key}_type".downcase) do |param|
  # use param
  return GuidInfo.get_or_new(PARAMS, V4_RELATIONSHIP_TYPES[key])
 end
end

Now you can invoke the method with a parameter:

get_1_type("xxx")

Edit 1

Some links about Ruby blocks:

Start with this one

Link 1

Link 2

时光磨忆 2024-09-23 11:41:07

我不确定为什么您要以这种方式创建一个方法,而不是再次打开类并插入您的方法,但您可以使用 class_eval 代替:

self.class.class_eval %Q{
  def get_#{key.downcase}_type(...)
    ...
  end
}

I'm not sure why you would create a method that way instead of just opening up the class again and inserting your method, but you could use class_eval instead:

self.class.class_eval %Q{
  def get_#{key.downcase}_type(...)
    ...
  end
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文