NoMethodError 当我使用元编程定义它时

NoMethodError while I defined it using metaprogramming

我正在编写一些代码。我正在尝试使用我创建的 gem 打印样本颜色列表,它会抛出 NoMethodError 我正在打开字符串 class,我正在这样做。

def self.sample_colors
  @@colors_arr.each do |color|
    puts "This is #{color}".color
  end
end

它应该可以工作,因为 .color 应该改变数组的颜色,所以第一个循环是 .red,然后是 .blue,依此类推。 此代码负责为每种颜色创建方法。

def self.create_colors
  @@colors_arr.zip(@@color_codes).each do |color,code|
    self.send(:define_method,color) do
    "\e[#{code}m#{self}\e[0m"
    end
  end
end

有什么想法吗? 编辑:如果我使用 .red.blue 它有效,我只是不明白为什么它有效而这个不是

问题出在

puts "This is #{color}".color

你基本上每次都在调用一个方法color。 Ruby 不关心你有一个名为 color 的局部变量。

您想将 sample_colors 定义为:

def self.sample_colors
  @@colors_arr.each do |color|
    puts "This is #{color}".send(color)
  end
end

发送方法将调用对象上给定string/symbol表示的方法名称。

您正在调用方法 color 而不是颜色名称。试试这个:

puts "This is #{color}".send(color.to_sym)