Arrays Ruby在数组中迭代方法名
我有一个对象,我想从中输出一组方法的结果。我有一个方法名数组,希望遍历它们:Arrays Ruby在数组中迭代方法名,arrays,ruby,loops,methods,Arrays,Ruby,Loops,Methods,我有一个对象,我想从中输出一组方法的结果。我有一个方法名数组,希望遍历它们: img = Magick::Image::read('/Users/rich/Projects/imagemagick/orig/IMG_4677.jpg')[0] atts = "background_color base_columns base_filename base_rows bias black_point_compensation".split(' ') atts.each do |i| puts
img = Magick::Image::read('/Users/rich/Projects/imagemagick/orig/IMG_4677.jpg')[0]
atts = "background_color base_columns base_filename base_rows bias black_point_compensation".split(' ')
atts.each do |i|
puts img.i # problem evaluating i
end
我尝试过字符串插值和eval
,但我无法让它意识到这是一个方法调用
是否有一种方法可以将数组作为方法名应用于对象?尝试使用:
尝试使用:
完美的非常感谢,回答得很好。请记住,
#public#u send
与#send
相比的最大优势在于您不会意外调用私有方法,因此它应该是您的默认方法,除非您有很好的理由这样做。完美。非常感谢,回答得很好。请记住,#public#u send
与#send
相比的最大优势在于,您不会意外调用私有方法,因此它应该是您的默认方法,除非您有很好的理由这样做。更合适的语法应该是%w(背景色基列基文件名基行偏黑点补偿)
或%i(背景颜色基础、列基础、文件名基础、行偏黑、点补偿)
%w()
表示以空格分隔的列表,并将转换为基于数组的字符串(基本上与拆分(“”)
)%i()
相同,但将转换为基于符号的数组
,前提是项目符合相应的符号
命名约定我遇到了问题,因此我运行了.split(“”)。是的,您是正确的。%i
可能更好,因为字符串将在内部转换为符号用于方法查找。可能更有效一些更合适的语法应该是%w(背景色基列基文件名基行偏黑点补偿)
或%i(背景色基列基文件名基行偏黑点补偿)
%w()
表示以空格分隔的列表,并将转换为基于数组的字符串(基本上与拆分(“”)
)%i()
相同,但将转换为基于符号的数组
,前提是项目符合相应的符号
命名约定我遇到了问题,因此我运行了.split(“”)。是的,您是正确的。%i
可能更好,因为字符串将在内部转换为符号用于方法查找。也许效率会稍微高一点
atts = "upcase downcase".split
atts.each do |i|
puts 'hEllO'.public_send(i)
end
#HELLO
#hello