如何使用元编程来减少Ruby代码中的冗余?
发布时间:2020-12-17 03:50:53 所属栏目:百科 来源:网络整理
导读:class Device def initialize(device_id,data_resource) @id = device_id @data_resource = data_resource end def display_device mode = @data_resource.get_display_device_mode(@id) presets = @data_resource.get_display_device_presets(@id) summary
class Device def initialize(device_id,data_resource) @id = device_id @data_resource = data_resource end def display_device mode = @data_resource.get_display_device_mode(@id) presets = @data_resource.get_display_device_presets(@id) summary = "display_device: #{mode} ($#{presets})" return "* #{summary}" if presets == "XTC909" summary end def chip mode = @data_resource.get_chip_mode(@id) presets = @data_resource.get_chip_presets(@id) summary = "chip: #{mode} ($#{presets})" return "* #{summary}" if presets == "XTC909" summary end def input_device mode = @data_resource.get_input_device_mode(@id) presets = @data_resource.get_input_device_presets(@id) summary = "input_device: #{mode} ($#{presets})" return "* #{summary}" if presets == "XTC909" summary end end 从上面的代码中可以看出,这些方法中存在相当多的冗余.无论元编程是否是减少这种冗余的最佳方法,我希望学习如何在Ruby中使用元编程来减少某些重复性,如果有人可以提供一些建议的话. 解决方法
这是一个使用元编程的版本,虽然我也可以通过将它放在它所属的方法中来删除重复.
class Device def initialize(device_id,data_resource) @id = device_id @data_resource = data_resource end def resource_summary(resource_name) mode = @data_resource.send("get_#{resource_name}_mode",@id) presets = @data_resource.send("get_#{resource_name}_presets",@id) summary = "#{resource_name}: #{mode} ($#{presets})" return "* #{summary}" if presets == "XTC909" summary end def self.resource_accessor(*names) names.each {|resource| define_method(resource) {resource_summary resource}} end resource_accessor :display_device,:chip,:input_device end 如果您确实不想为该功能创建方法,则可以使用resource_summary方法的主体替换resource_summary方法调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |