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)
我正在编写一些代码。我正在尝试使用我创建的 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)