小编Shu*_*Shu的帖子

如何覆盖trait函数并从重写函数调用它?

场景:

trait A {
    function calc($v) {
        return $v+1;
    }
}

class MyClass {
    use A;

    function calc($v) {
        $v++;
        return A::calc($v);
    }
}

print (new MyClass())->calc(2); // should print 4
Run Code Online (Sandbox Code Playgroud)

这段代码不起作用,我找不到像继承那样调用特征函数的方法.我试着打电话self::calc($v),static::calc($v)和parent::calc($v),A::calc($v)以及以下内容:

trait A {
    function calc($v) {
        return $v+1;
    }
}

class MyClass {
    use A {
        calc as traitcalc;
    }

    function calc($v) {
        $v++;
        return traitcalc($v);
    }
}
Run Code Online (Sandbox Code Playgroud)

什么都行不通.

有没有办法使它工作或必须完全覆盖比这复杂得多的特征函数:)

php traits

344
推荐指数
5
解决办法
9万
查看次数

使用From类型为结构实现PartialEq

我试图PartialEq在我创建的结构和我的结构实现From特征的其他类型之间实现.真正的代码更复杂,并且From适用于其他类型,但这是核心问题的精简版本.

我希望能够做到:

let s = Data::from(5);
assert_eq!(5, s);
Run Code Online (Sandbox Code Playgroud)

这是基本代码:

struct Data {
    data: i64,
}

impl From<i64> for Data {
    fn from(v: i64) -> Data {
        Data { data: v }
    }
}

impl<'a> From<&'a i64> for Data {
    fn from(v: &'a i64) -> Data {
        Data { data: v.clone() }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的第一次尝试:

impl<T> PartialEq<T> for Data
    where T: Into<Data>
{
    fn eq(&self, other: &T) -> bool {
        let o = Data::from(other);
        self.data …
Run Code Online (Sandbox Code Playgroud)

struct traits rust

5
推荐指数
2
解决办法
385
查看次数

jqGrid:在自定义格式化程序中使用预定义的格式化程序

我想在自定义格式化程序中使用预定义的格式化程序.

例如,这是colModel:

colModel: [
  ...
  { name: 'col1', formatter: myFormatter }
  ...
]
Run Code Online (Sandbox Code Playgroud)

这是格式化程序:

function myFormatter(cellValue, options, rowObject) {
  if (typeof cellValue === 'number') {
    // Here I want to call the "currency" predefined formatter on the cellValue

  } else {
    return 'No number to display';
  }
}
Run Code Online (Sandbox Code Playgroud)

可能吗?谢谢.

javascript jquery jqgrid

2
推荐指数
1
解决办法
1538
查看次数

标签 统计

traits ×2

javascript ×1

jqgrid ×1

jquery ×1

php ×1

rust ×1

struct ×1