使用Libsass时,Sass不会编译(参数不能为空)

时间:2015-09-04 11:07:47

标签: sass libsass

所以我使用了一些非常复杂的Sass来删除"&"

中的所有其他选择器
.test, .test-2, .test-3, .test-4 {
    $selectors: (&);
    @if length(&) != 1 {
        $selectors: (); // Works only with Ruby Sass
        $i: 1;
        @each $item in (&) {
            $i: $i + 1;
            @if $i % 2 == 0 {
                $i: 0;
            }@else{
                $selectors: append($selectors, $item);
            }
        }
      $selectors: to-string($selectors, ", ");
        content: "#{$selectors}";
    }
}

我对content属性的预期结果是:

content: ".test-2, .test-4";

使用Ruby Sass时,这正是我得到的。使用Libsass时,我收到此错误:

argument `$list` of `nth($list, $n)` must not be empty 

此错误指的是自定义" to-string"中的代码。功能我使用:

@function to-string($list, $glue: '', $is-nested: false, $recursive: false) {
    $result: null;
    @for $i from 1 through length($list) {
        $e: nth($list, $i);
        @if type-of($e) == list and $recursive {
            $result: $result#{to-string($e, $glue, true)};
        }  
        @else {
            $result: if(
                $i != length($list) or $is-nested, 
                $result#{$e}#{$glue}, $result#{$e}
            );
        }
    }
    @return $result;
}

更具体地说,这一行:

$e: nth($list, $i);

我传递给to-string函数(即$selectors变量)的值似乎是空的,当它不应该是。我最初将其定义为空($selectors: ();),但随后我追加了来自&的所有其他项目。所以我不确定为什么它在这一点上是空的。

以下是Sassmesiter演示此问题:http://sassmeister.com/gist/332dae9a27983edd9d15

将上面演示中的编译器更改为Libsass以查看错误。

我不确定这是我的代码还是Libsass的问题。除非我确定这是一个Libsass问题,否则我不想在Libsass上打开一个问题。

由于

1 个答案:

答案 0 :(得分:0)

好的,我深究了这一点。相当肯定这是一个Libsass问题。

看起来您无法直接遍历&中的每个项目,但如果我将@each $item in & { ... } 存储在变量中,它就会继续工作。

所以澄清一下,改变这个:

$this: &;
@each $item in $this {
    ...
}

到此:

JavaPairDStream<String, Iterable<Float>> groupedByKey = pairDstream.groupByKey();

JavaPairDStream<String, Float> medianPerPlug1h = groupedByKey.transformToPair(new Function<JavaPairRDD<String,Iterable<Float>>, JavaPairRDD<String,Float>>() {
        public JavaPairRDD<String, Float> call(JavaPairRDD<String, Iterable<Float>> v1) throws Exception {
            return v1.mapValues(new Function<Iterable<Float>, Float>() {
                public Float call(Iterable<Float> v1) throws Exception {

                    List<Float> buffer = new ArrayList<Float>();

                    long count = 0L;
                    Iterator<Float> iterator = v1.iterator();
                    while(iterator.hasNext()) {
                        buffer.add(iterator.next());
                        count++;
                    }

                    float[] values = new float[(int)count];

                    for(int i = 0; i < buffer.size(); i++) {
                        values[i] = buffer.get(i);
                    }

                    Arrays.sort(values);

                    float median;

                    int startIndex;

                    if(count % 2 == 0) {
                        startIndex = (int)(count / 2 - 1);

                        float a = values[startIndex];
                        float b = values[startIndex + 1];

                        median = (a + b) / 2.0f;
                    } else {
                        startIndex = (int)(count/2);

                        median = values[startIndex];
                    }

                    return median;
                }
            });
        }
}); 

medianPerPlug1h.print();

解决问题。