scala类构造函数中的含义

时间:2016-09-08 12:03:40

标签: scala implicit

我不明白为什么以下三个例子中只有一个有效?是什么让其他两个错误?

class H(implicit a:String, b: Int) {
  //Working
}

class H(a:String, implicit b: Int) {
  //Not-Working
}

class H(implicit a:String, implicit b: Int) {
  //Not-Working
}

2 个答案:

答案 0 :(得分:2)

在第一种情况下,implicit并未引用a,而是引用整个参数列表。这意味着在调用构造函数时可以隐式提供&{34; ab。 (并且还将它们作为课堂主体中的隐含物提供)。在这个意义上,您无法创建类或方法implicit的单个参数。

implicit的第二个用途是标记一个类型/对象成员。构造函数参数不是成员,但可以使用val / var成为成员,如pamu的答案;或者,为了避免让它可见,private[this] val

答案 1 :(得分:0)

<ul>

  <li>
    <figure>
      <a href="#">
        <img src="http://placehold.it/400" />
      </a>
      <figcaption>
        <div class="itemname"><span class="price">$10</span>Product</div>
        <form>
          <select>
            <option selected>Please select</option>
          </select>
          <button type="submit">Add to Basket</button>
        </form>
      </figcaption>
    </figure>
  </li>

  <li>
    <figure>
      <a href="#">
        <img src="http://placehold.it/400" />
      </a>
      <figcaption>
        <div class="itemname"><span class="price">$10</span>Product Two With A Much Longer Name That Could Wrap</div>
        <form>
          <select>
            <option selected>Please select</option>
          </select>
          <button type="submit">Add to Basket</button>
        </form>
      </figcaption>
    </figure>
  </li>

  <li>
    <figure>
      <a href="#">
        <img src="http://placehold.it/400" />
      </a>
      <figcaption>
        <div class="itemname"><span class="price">$10</span>Product Three No Select</div>
        <form>
          <button type="submit">Add to Basket</button>
        </form>
      </figcaption>
    </figure>
  </li>

  <li>
    <figure>
      <a href="#">
        <img src="http://placehold.it/400" />
      </a>
      <figcaption>
        <div class="itemname"><span class="price">$10</span>Product</div>
        <form>
          <select>
            <option selected>Please select</option>
          </select>
          <button type="submit">Add to Basket</button>
        </form>
      </figcaption>
    </figure>
  </li>
</ul>

在两种情况下需要val或var

class H1(implicit a:String, b: Int) {
  //Working
}