我正在研究一些代码。我正在尝试使用我创建的gem打印样本颜色列表,并抛出NoMethodError
我正在打开String类,我正在这样做。
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
它有效,我只是不知道为什么这样做而且这个不是
答案 0 :(得分:2)
问题在于
将“这是#{color}” .color
您基本上每次都会调用颜色方法。 Ruby并不关心你有一个名为color的局部变量。
您想将sample_colors定义为:
def self.sample_colors
@@colors_arr.each do |color|
puts "This is #{color}".send(color)
end
end
send方法将调用对象上给定字符串/符号表示的方法名称。
答案 1 :(得分:0)
您正在调用方法color
而不是颜色的名称。试试这个:
puts "This is #{color}".send(color.to_sym)