2

我从另一个开发人员那里继承了一个 Ruby on Rails 项目(v 2.0),我试图通过在其上运行 rubocop 来清理它。对于那些不知道的人,rubocop 只是一个用于确保代码在整个项目中标准化和清洁的工具,它还能捕捉到一些格式错误和其他错误。下面的第 3 行(数据 = $1)显示了我受到攻击的函数:

def save_file(photo_data)
  photo_data =~ /data:image\/jpeg;base64,(.*)/
  data = $1
  File.open(raw_photo_location, 'wb') do |f|
    f.write(Base64.decode64(data))
  end
  return true
end

Rubocop 在该行的消息指出:“更喜欢使用 MatchData 而不是 1 美元。”

我不确定如何有效地纠正这个偏好问题,因为我对 Ruby on Rails 及其语法和语义最熟悉。我所知道的是 $1 是一个全局变量。任何人都可以在这里指导我进行格式修复吗?我感谢任何人的高级帮助,如果这个问题真的很愚蠢,我深表歉意。

4

2 回答 2

2

这应该有效:

def save_file(photo_data)
  data = /data:image\/jpeg;base64,(.*)/.match(photo_data)[1]
  File.open(raw_photo_location, 'wb') do |f|
    f.write(Base64.decode64(data))
  end
  return true
end
于 2013-12-10T15:33:49.277 回答
1

你不应该使用=~or .match

惯用的方法是使用[]

data = photo_data[/data:image\/jpeg;base64,(.*)/, 1]
于 2014-01-10T15:39:51.757 回答