标签: traits

为什么我们不能两次混合特质?

Scala代码:

trait Box {
  def put(num:Int) = println("Put number: " + num)
}

trait DoubleBox extends Box {
  override def put(num:Int) = super.put(2*num)
}

object MyBox extends Box with DoubleBox

MyBox.put(3)
Run Code Online (Sandbox Code Playgroud)

它工作正常并打印 6

但是当我尝试:

object MyBox extends Box with DoubleBox with DoubleBox
Run Code Online (Sandbox Code Playgroud)

它无法编译:

error: trait DoubleBox is inherited twice
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我的代码看起来合理时有这样的限制?

inheritance scala traits

0
推荐指数
1
解决办法
141
查看次数

寻找int的trait core :: cmp :: PartialEq的实现

我想在泛型类中使用int,它需要通用类来实现core :: cmp :: PartialEq trait.我知道int正在实现它,因为我可以做4!= 5.问题是编译器无法识别并触发以下错误:

错误:无法推断出足够的类型信息来定位core::cmp::PartialEq该类型的特征的impl <generic integer #2>; 类型注释需要src/binary_tree.rs:80 let tree = Node :: new_node(方框10);

src/binary_tree.rs:80:13:80:27注意:特性core::cmp::PartialEq必须实现,因为它是必需的Node<T>::new_node

你能帮我找一下int的partialeq的实现吗?

generics traits rust

0
推荐指数
1
解决办法
185
查看次数

Scala Traits如何表现?

我创建了这个小Scala示例,以了解更好的特征.

trait Writer {
  def write(value: Int): Unit = {
    print("Writer")
  }
}

trait Hdd extends Writer {
  override def write(value: Int): Unit = {
    print("Hdd")
  }
}

trait File extends Writer {
  override def write(value: Int): Unit = {
    print("File")
  }
}

class TestClass extends App {
  (1)   val myWriter = new Writer with Hdd   // This line looks fine
  (2)   val myNewWriter = new Writer         // This line fail
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,不可能实例化Trait,因此第(2)行失败了.

但由于某种原因,我无法理解,第(1)行看起来很好.

这怎么可能?

scala traits

0
推荐指数
1
解决办法
76
查看次数

从Interface而不是Trait调用同名方法?

printData()MyInterface.php和中创建了相同的方法,MyTrait.phpprintData()从我的控制器调用方法来实现MyInterface.php和使用MyTrait.php.但是这个方法总是来自MyInterface.php.请解释一下为什么会这样?

MyInterface.php

<?php namespace App\Interfaces;

interface MyInterface
{
    public function printData();
}
Run Code Online (Sandbox Code Playgroud)

MyTrait.php

<?php namespace App\Traits;

trait MyTrait
{
    public function printData()
    {
        dd("From Trait");
    }
}
Run Code Online (Sandbox Code Playgroud)

HomeController.php

<?php namespace App\Http\Controllers;

use App\Interfaces\MyInterface;
use App\Traits\MyTrait;
use App\User;

class HomeController extends Controller implements MyInterface
{
    use MyTrait;

    public function index()
    {
        $this->printData();
    }

    public function printData() {
        // TODO: Implement printData() method.
        dd("From Interface");
    }
}
Run Code Online (Sandbox Code Playgroud)

php interface traits laravel

0
推荐指数
1
解决办法
320
查看次数

没有找到Laravel 5.5 Trait

我无法绕过这个,因为我在另一个项目上有这个并且工作得很好.它目前给我这个错误

Symfony\Component\Debug\Exception\FatalErrorException(E_UNKNOWN)Trait'App\Traits\ResponseTrait'未找到

UserRepository工作正常,特性没有.我已经尝试重命名特征,将其移动到存储库文件夹,chmod到777,我不知道什么是错的.

认识我的HomeController,laravel的默认设置:

<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Repositories\UserRepository as User;
use App\Traits\ResponseTrait;

class HomeController extends Controller
{
  use ResponseTrait;

  private $user;

  /**
  * Create a new controller instance.
  *
  * @return void
  */
  public function __construct(User $user)
  {
    $this->user = $user;
    $this->middleware('auth');
  }

  /**
  * Show the application dashboard.
  *
  * @return \Illuminate\Http\Response
  */
  public function index()
  {
    //dd($this->user->all()->toArray());
    //You can ignore the self:: part, as it doesn't reach this far.
    self::setData($this->user->all()->toArray());
    return "test";
    return view('home');
  } …
Run Code Online (Sandbox Code Playgroud)

php traits laravel

0
推荐指数
1
解决办法
2693
查看次数

为什么std :: str :: parse的签名不使用特征绑定?

parseRust的str原始类型的方法签名是

pub fn parse<F>(&self) -> Result<F, <F as FromStr>::Err>
Run Code Online (Sandbox Code Playgroud)

为什么不如下?

pub fn parse<F: FromStr>(&self) -> Result<F, F::Err>
Run Code Online (Sandbox Code Playgroud)

我想也许原始演员会确保Err解决FromStr::Err,而不是SomeOtherTrait::Err.

不过,考虑到parse文档中的以下行...

parse可以解析实现FromStr特征的任何类型

为什么没有特质限制?

traits rust

0
推荐指数
1
解决办法
100
查看次数

在异构Rust集合中使用Any trait对象有什么问题?

在像Clojure这样的动态语言中,很容易表达不同类型的集合:

{:key1 "foo", :key2 [34 "bar" 4.5], "key3" {:key4 "foobar"}}
Run Code Online (Sandbox Code Playgroud)

在Rust中,实现此类集合的首选方法是使用特征对象或枚举.使用Any特征对象似乎是最灵活的方法(如果没有固定数量的已知类型替代方法),因为它允许向下转换为实际的对象类型:

let mut vector: Vec<Box<Any>> = Vec::new();
vector.push(Box::new("I’m"));
vector.push(Box::new(4 as u32));
console!(log, vector[0].downcast_ref::<&str>());
console!(log, vector[1].downcast_ref::<u32>());
Run Code Online (Sandbox Code Playgroud)

这种方法似乎是不鼓励的.它的缺点是什么?

collections polymorphism traits rust

0
推荐指数
1
解决办法
157
查看次数

php文件中的"use"语句

我是Laravel的初学者,在学习"命名空间"和"使用"语句时,我发现,例如,在Controllers中,当我们第一次编写"use"语句时,它应该在函数内部重复.

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{

    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}
Run Code Online (Sandbox Code Playgroud)

为什么这样工作呢?为什么在不重复函数的情况下编写"use"语句就不够了?而且,如果我要创建另一个具有相同命名空间的Controller,我是否应该在那里编写相同的"use"语句?

php namespaces traits laravel

0
推荐指数
1
解决办法
118
查看次数

我们可以使用具有scala特征的新关键字吗

我到处都读到我们无法实例化特征,但是当我运行这段代码时,它运行良好。我对scala的特性感到困惑,有人可以解释一下。

trait X {
  def a: Int
  def b: String
}

object test {
  def main(args: Array[String]) {
    new X() {
      override def a: Int = 1

      override def b: String = "as"
    }
}
Run Code Online (Sandbox Code Playgroud)

inheritance scala traits

0
推荐指数
1
解决办法
37
查看次数

在mixin中调用super的行为

下面的代码显示了mixin。

trait A{
    def a = 1
}

trait X extends A{
    override def a = {
        println("X")
        println((super.a + 3).toString)
        super.a + 3
    }
}  


trait Y extends A{
    override def a = {
        println("Y")
        println((super.a + 5).toString)
        super.a + 5
    }
}

val xy = new AnyRef with X with Y
xy.a
Run Code Online (Sandbox Code Playgroud)

代码的输出是

Y
X
4
9
X
4
Run Code Online (Sandbox Code Playgroud)

我已经读过混合两个或多个特征的用法,显示从最右边到最左边开始的可堆叠行为,并使用线性化解决了对super()的调用。但是从输出来看,似乎X被调用了两次。请解释输出。

scala traits

0
推荐指数
1
解决办法
40
查看次数