【问题标题】:Ruby glob: Exclude dir and fileRuby glob:排除目录和文件
【发布时间】:2016-05-29 14:22:57
【问题描述】:

对于我的 Sass 文件的导入,我使用 sass-rails' (https://github.com/rails/sass-rails) glob 功能。它说

可以使用任何有效的 ruby​​ glob

我想在使用@import 时排除一个目录和一个文件。 任何使用块的 ruby​​ 代码在这种情况下都不起作用。但即使尝试排除单个文件也无法按我想要的方式工作。

考虑这个树形结构

/_bar.scss
/_foo.scss
/all.scss

例如,我想排除文件_foo.scss。我在这里读到了https://stackoverflow.com/a/27707682/228370,使用! 你可以否定一个模式。

我尝试了以下方法:

Dir["{[!_foo]}*.scss"]
=> ["all.scss"]

但这会跳过_bar.scss。查看 Ruby 的全局参考 (http://ruby-doc.org/core-2.2.0/Dir.html#method-c-glob) 时,原因就很清楚了:

[设置] 匹配集合中的任何一个字符。行为与正则表达式中的字符集完全相同,包括集合否定 ([^a-z])。

(显然,可以使用! AND ^ 实现否定)

因为我们的模式中有一个下划线,所以每个带下划线的文件都会被排除在外。

但是排除固定文件的解决方案是什么?

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    可能有一种正则表达式方法。但是,如果您谈论的是一个特定的文件,那么这样做可能会更容易:

    Dir["*.scss"].reject { |i| i == '_foo.scss' }
    

    【讨论】:

    • 因为我在 sass 中需要这个以及 @import,所以这行不通。我在我的问题中提到了这一点任何使用块的 ruby​​ 代码在这种情况下都不起作用
    猜你喜欢
    • 2017-07-08
    • 1970-01-01
    • 2020-02-27
    • 2018-11-20
    • 2012-09-19
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 1970-01-01
    相关资源
    最近更新 更多