gpt4 book ai didi

ruby - 如何使用元编程来减少此 Ruby 代码中的冗余?

转载 作者:数据小太阳 更新时间:2023-10-29 07:24:23 26 4
gpt4 key购买 nike

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 的方法调用方法。

关于ruby - 如何使用元编程来减少此 Ruby 代码中的冗余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1182655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com