小编Con*_*wen的帖子

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

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
Run Code Online (Sandbox Code Playgroud)

从上面的代码中可以看出,这些方法中存在相当多的冗余. …

ruby metaprogramming

4
推荐指数
1
解决办法
373
查看次数

在这个例子中lambda的目的是什么?

lambda在本例中用于组合和水合物方法.lambda在这做什么?

def compose *lambdas
  if lambdas.empty?
    lambda { nil }
  elsif lambdas.size == 1
    lambdas.first
  else
    lambda do |n|
      lambdas.first.call(compose(*lambdas[1..-1]).call(n))
    end
  end
end

def hydrate(modulus, printable_form)
  i = 0
  lambda do |n|
    (i = (i + 1) % modulus) == 0 && printable_form || n
  end
end

print(((1..100).map
   &compose(
     hydrate(15, 'Watermelon'), 
     hydrate(5, 'Melon'), 
     hydrate(3, 'Water'))).join(' '))
Run Code Online (Sandbox Code Playgroud)

我的第二个问题是 - 在撰写单词前面的&符号需要什么?

ruby lambda metaprogramming

1
推荐指数
3
解决办法
1093
查看次数

标签 统计

metaprogramming ×2

ruby ×2

lambda ×1