代码之家  ›  专栏  ›  技术社区  ›  iOSAppDev

Ruby:在使用if-else和break时使用void值表达式

  •  0
  • iOSAppDev  · 技术社区  · 6 年前

    Danger 在GitHub PR上添加检查。用例之一是检查my PR中修改的文件是否包含特定更改。我在DangerFile中添加了以下代码

    filesArray = ["Resources/Config.plist", "Resources/Deployment.plist"]
    
    def modified_files_contains_change(files, change)
        does_contain_required_changes = false
        for file in files do
            message "diff in #{file}"
            diff = git.diff_for_file(file)
            patch_contains_change = diff.patch =~ #{change}
            if diff && patch_contains_change
                does_contain_required_changes = true
            else
                does_contain_required_changes = false
                break
            end
        end
        message "Does contain changes in all files => #{does_contain_required_changes}"
        does_contain_required_changes
    end
    
    if modified_files_contains_change(files, change)
       warn "Some useful warning message goes here"
    end
    

    [!] Invalid `Dangerfile` file: void value expression. 
    
     #  from Dangerfile:33
     #  -------------------------------------------
     #              does_contain_required_changes = false
     >              break
     #          end
     #      end
     #  -------------------------------------------
    

    我试着搜索,但不明白出了什么问题。有人能帮我理解到底是什么问题吗?提前谢谢。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Aleksei Matiushkin    6 年前

    =~ #{change} 被解读为公正 =~ 因为 # 开始内联注释。 =~

    patch_contains_change = diff.patch =~ #{change}
    

    致:

    patch_contains_change = diff.patch =~ Regexp.new(change)
    

    这假定您将字符串作为 change .


    而且,这将是

    def modified_files_contains_change(files, change)
      does_contain_required_changes =
        files.all? do |file|
          message "diff in #{file}"
          # break will immediately exit the `all?` unless diff is present
          break false unless diff = git.diff_for_file(file) 
          diff.patch =~ Regexp.new(change)
        end
    
      message "Does contain changes in all files => #{does_contain_required_changes}"
      does_contain_required_changes
    end
    

    def modified_files_contains_change(files, change)
      problematic_file =
        files.detect do |file|
          message "diff in #{file}"
          (diff = git.diff_for_file(file)).nil? || diff.patch !~ Regexp.new(change)
        end
    
      does_contain_required_changes = problematic_file.nil?
      if does_contain_required_changes
        message "All good!"
      else
        message "We have issues with file #{problematic_file}"
      end
      does_contain_required_changes
    end