Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中实现以下要求?_Ruby_Configuration_Arguments_Block_Metaprogramming - Fatal编程技术网

如何在ruby中实现以下要求?

如何在ruby中实现以下要求?,ruby,configuration,arguments,block,metaprogramming,Ruby,Configuration,Arguments,Block,Metaprogramming,我尝试了下面的代码来实现上述结果。但我不知道如何在块中传递不同的参数?或者我如何才能达到上述效果 @custom_column = CustomColumns.configure :projects do |user, tag| columns = ModelName.method_name(user,tag) end @custom_column.columns should return ["title", "description"] CustomColumns.projects.c

我尝试了下面的代码来实现上述结果。但我不知道如何在块中传递不同的参数?或者我如何才能达到上述效果

@custom_column = CustomColumns.configure :projects do |user, tag|
  columns = ModelName.method_name(user,tag)
end

@custom_column.columns should return ["title", "description"]
CustomColumns.projects.columns should return ["title", "description"]

@custom_column1 = CustomColumns.configure :groups do |domain|
  columns = ModelName.method_name(domain)
end

@custom_column1.columns should return => ["desctiption", "created_at"]
CustomColumns.groups.columns should return => ["desctiption", "created_at"]

你想要的是不可能的。foo=bar始终被解释为分配给局部变量。它永远不会调用foo=setter。您必须提供一个显式接收器。

对于初学者来说,您的block似乎需要参数,但您不能使用block.call生成任何参数。e、 g.在第一个示例中,它期望将用户和标记发送到块,在第二个示例中,它期望域。但是还有更多的可用。一旦你了解了它是如何工作的,它可能会帮助你弄明白这一点。我所要求的是可以实现的还是不能实现的?还是我遗漏了什么?有没有其他方法可以实现这一点?处理上述情况的最佳和首选方法是什么?目前尚不清楚上述情况是什么。你扔掉了一堆没有解释的代码,问人们是否可以运行这些代码,答案是否定的。如果你想知道人们是否可以设计出不同的代码,你首先必须解释这是什么。
module CustomColumns
  class Rule
      attr_accessor :column_for, :columns
  end

  class << self
    attr_accessor :rule
  end

  def self.configure(column_for, &block)
    @column_for = column_for
    @columns = block.call
  end

end