新手求助, dart 类创建和方法执行。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Dnlyao
V2EX    Flutter

新手求助, dart 类创建和方法执行。

  •  
  •   Dnlyao 2024-08-26 17:35:48 +08:00 2089 次点击
    这是一个创建于 473 天前的主题,其中的信息可能已经有所发展或是发生改变。

    代码如下

     Test().change(); Test(); } class Test { factory Test() => Test.print(); var a = 1; change() { a = 2; print('change$a'); } Test.print() { print('print$a'); } } 

    为什么会出现这样的结果

    print1 change2 print1 

    最好能详细讲解一下,或者给出相关关键词,我自己去查资料

    12 条回复    2024-09-14 14:38:42 +08:00
    AoEiuV020JP
        1
    AoEiuV020JP  
       2024-08-26 18:04:54 +08:00
    没看出什么会让人困惑的点,明显是每次创建 Test 时打印 print1 ,一共两次, 调 change 时打印了 change2 ,
    jifengg
        2
    jifengg  
       2024-08-27 08:49:05 +08:00
    不如楼主你说说你原本希望是啥结果,这样大家就知道你哪里不清楚了。
    我和一楼一样,觉得没啥困惑点。
    Dnlyao
        3
    Dnlyao  
    OP
       2024-08-27 09:36:53 +08:00
    @jifengg 忘记说了,不好意思。就 change 先执行,想着是 a 一局被修改成 2 了,想着 print()打印的应该是 a=2 。
    Dnlyao
        4
    Dnlyao  
    OP
       2024-08-27 09:38:20 +08:00
    还有个问题,使用了工厂模式,他是会直接调用一次吗?就像第一次打印。我的理解是,main 中 1.change()。2 是 print().只有两个打印。
    jifengg
        5
    jifengg  
       2024-08-27 10:32:27 +08:00
    1:`factory Test() => Test.print();`
    这里换成
    ```
    factory Test(){
    Test.print();
    }
    ```
    能让你更好理解。


    2:
    `Test().change();`
    等价于:
    ```
    var t = Test(); // 就是你定义的 factory
    t.change();
    ```

    这么拆解下来,能理解为什么先打印“print1”了吧?
    Dnlyao
        6
    Dnlyao  
    OP
       2024-08-27 11:41:20 +08:00
    @jifengg 理解,感谢回复。那为什么 a 的值会改不了,第一次是 1 ,因为初始化时是 1 ,然后 change 方法,a 不是应该是 2 吗?
    jifengg
        7
    jifengg  
       2024-08-27 13:10:52 +08:00
    @Dnlyao

    ```
    print1
    change2
    print1 <------- 你是问这里为什么是 1 ?你认真的?
    ```
    Dnlyao
        8
    Dnlyao  
    OP
       2024-08-27 14:07:02 +08:00
    @jifengg 认真,真的理解不了这个。a 不是类里面的变量吗? change 方法改变了,为什么调用了,还是不行。还是说每次调用,等于 new Test()这样调用?
    AoEiuV020JP
        9
    AoEiuV020JP  
       2024-09-05 15:54:37 +08:00   1
    9 天了,虽然没人回复,但我想楼主应该已经解决了吧,或者已经放弃编程了,
    两个 Test()是生成了两个 Test 类的对象, 分别包含不同的 a ,第一个 Test 中的 a 确实改成 2 了, 但第二个 Test 中的 a 还是初始化时给的 1 ,
    Dnlyao
        10
    Dnlyao  
    OP
       2024-09-05 17:08:35 +08:00
    @AoEiuV020JP 理解,感觉半懂。感谢
    sikong31
        11
    sikong31  
       2024-09-13 18:39:08 +08:00   1
    这是成员变量,不是类变量,更不是捕获局部变量。成员变量自然每次创建都会是初始化的值
    Dnlyao
        12
    Dnlyao  
    OP
       2024-09-14 14:38:42 +08:00
    @sikong31 懂了,谢谢你。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2222 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 15:59 PVG 23:59 LAX 07:59 JFK 10:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86