第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

對(duì)于我不擁有的類型,我如何實(shí)現(xiàn)我不擁有的特性?

對(duì)于我不擁有的類型,我如何實(shí)現(xiàn)我不擁有的特性?

對(duì)于我不擁有的類型,我如何實(shí)現(xiàn)我不擁有的特性?我想實(shí)現(xiàn)Shl特征Vec,代碼在下面。這會(huì)使事情像vec << 4有可能,這是很好的糖vec.push(4).use std::ops::Shl;impl<T> Shl<T> for Vec<T> {     type Output = Vec<T>;     fn shl(&self, elem: &T) -> Vec<T> {         self.push(*elem);         *self     }}fn main() {     let v = vec![1, 2, 3];     v << 4;}編譯失敗,出現(xiàn)以下錯(cuò)誤:無(wú)法提供在此機(jī)箱中未定義特征和類型的擴(kuò)展實(shí)現(xiàn)[E 0117]或類型參數(shù)T必須用作某些本地類型的類型參數(shù)(例如,MyStruct<T>);只有當(dāng)前機(jī)箱中定義的特征才能對(duì)類型參數(shù)[E 0210]實(shí)現(xiàn)。據(jù)我所知,我必須修補(bǔ)stdlib,更具體地說(shuō),collections::vec箱子。是否有另一種方法可以將此代碼更改為成功編譯?
查看完整描述

2 回答

?
楊__羊羊

TA貢獻(xiàn)1943條經(jīng)驗(yàn) 獲得超7個(gè)贊

雖然你不能完全做到這一點(diǎn),但通常的解決方法是將你想要的類型封裝在你自己的類型中,并在此基礎(chǔ)上實(shí)現(xiàn)這個(gè)特性。

use somecrate::FooType;use somecrate::BarTrait;struct MyType(FooType);impl BarTrait for MyType {
    fn bar(&self) {
        // use `self.0` here
    }}


查看完整回答
反對(duì) 回復(fù) 2019-07-04
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

這會(huì)使事情像vec << 4有可能,這是很好的糖vec.push(4).

雖然這是可以做到的,但它通常是一個(gè)餿主意若要實(shí)現(xiàn)具有意外語(yǔ)義的運(yùn)算符,請(qǐng)執(zhí)行以下操作。

下面是如何做到這一點(diǎn)的一個(gè)例子:

use std::ops::Shl;struct BadVec<T>(Vec<T>);impl<T> Shl<T> for BadVec<T> {
    type Output = BadVec<T>;

    fn shl(mut self, elem: T) -> Self::Output {
        self.0.push(elem);
        self
    }}fn main() {
    let mut v = BadVec(vec![1, 2, 3]);
    v = v << 4;
    assert_eq!(vec![1, 2, 3, 4], v.0)}

如果你實(shí)現(xiàn)Deref (DerefMut):

use std::ops::{Deref, DerefMut};impl<T> Deref for BadVec<T> {
    type Target = Vec<T>;

    fn deref(&self) -> &Self::Target {
        &self.0
    }}impl<T> DerefMut for BadVec<T> {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }}

你可以打電話Vec方法:

fn main() {
    let mut v = BadVec(vec![1, 2, 3]);
    v = v << 4;
    v.truncate(2);
    assert_eq!(2, v.len());}

看一下newtype_derive板條箱,它可以為你生成一些樣板代碼。


查看完整回答
反對(duì) 回復(fù) 2019-07-04
  • 2 回答
  • 0 關(guān)注
  • 514 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)