Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

9 R& f7 j6 W- q& q& q7 X& ~View pure修饰符:
8 n% W; G2 o! Q! z9 r使用view与pure不需要gwei8 V, j3 U& `  _. X' ^1 O; X; h) T
2 `2 P. C! h  H/ H( e
view:不能修改链上数据只能访问( |, D" K4 m8 }5 Q

$ A: R0 g2 x* }8 v% R; r1 upure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用
! \( ^' @  C) D" U5 L- ?- d6 }+ T7 a9 D
  1. contract ViewPureExample {
    , h' m* j: E: k$ N
  2.     uint public age;/ l# c! }6 N' P0 D% T- B! {* p1 O
  3.     function increaseAge() public{1 A% T' G7 Y9 {& K* p$ h; J9 w
  4.       age ++;: P" W8 U  q  {0 k' g1 p
  5. }
    & `5 V7 @4 G2 Z

  6. ! f, @4 g( S  K9 s. U8 `  r
  7.     function GetViewAge() public view returns(uint){ //view 修饰
    * r! e$ W) Y% Z" k3 a, ~
  8.         //age ++;// 不可修改变量  C+ p: M. u) s) U
  9.         return age;
    3 [, u2 t; {; e: `8 c% F
  10. }1 u: f8 p1 h: ~: r* j" r+ m! j6 H

  11. $ ~( _( {: ]; {) ~
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数# s" }3 ^0 j+ T# r" O
  13.         age ++;7 d$ O) b0 W/ l( h0 R
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量4 z; Z3 W9 Q; G0 B5 ?' h7 L0 L0 N
  15.     }
    ; U7 d) w* n2 ]6 O, C" d& X) u
  16. }
复制代码
, K! s8 \6 i4 C* }
( E! _2 {% A6 `
; t& h! z1 X/ P  r1 r
* U7 y( k* G& V1 C! c
Public internal private external 方法修饰符:
' g- N  V. ^$ g- Bpublic:任何地方都可以调用
3 B3 H  W; `9 k# `7 i1 l
0 u9 F# ]! w' q1 }internal:只有本sol文件调用7 R, z" m+ x2 r1 S1 J
5 ?: j' ?1 W7 `& I1 k% C4 {7 H
private:只有本合约能调用
  c+ G2 R0 F: v' |& [. H* Q( ?$ [) b& g
external:只能从外部调用即合约外部
" G$ P9 S. n2 n1 b: E0 H. a2 Y' r2 R3 h6 M' f3 X2 ?5 q
/ m1 W! J; @& {8 U' `; f
9 \. K& d+ E; X2 [. j
  1. contract PublicExternalPrivateInternal {) e" o+ }' {/ E4 @
  2.     uint age = 100;
    - x- h- F1 s/ K+ j: ?2 R/ g
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用
    . n0 u& h# U6 ?, {6 `
  4.         return age;! }; j- l% U. t$ Q% Y& J
  5.     }
    ! x, h. i+ i6 C9 u( B
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用) x0 P! G4 W4 o. R
  7.         return age;0 x, _& S: F" T+ E" g  H9 V$ Q
  8.     }
    0 T9 `1 M" j* O' H

  9. 1 M0 n& n8 c4 u
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用2 R! v4 u6 o* w$ _! ]* L4 f- Y
  11.         return ag;( b" e; U$ X) d, q) K
  12.     }
    9 `$ Y9 P4 f; h8 \

  13. 8 F" y: l. @; z6 f/ o0 n# F' c
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部
    ' e5 m& P+ |( K. r
  15. //调用
    5 q4 E6 a' {% H' Q: @/ ~
  16.         return age;! L+ @0 R% S, \% B
  17.     }
    / O! D! q& c* U3 w

  18. ! u) Q2 C7 J9 l( _
  19.     function Callfunction() public view returns(uint){* y- k' R$ E# I/ n* y
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许% j1 q3 P) J+ c8 ^9 e- q3 |
  21.     }' ]% B" i% Z6 G1 j% X
  22. 2 M6 Z+ ]' G6 i/ a6 Z- k" r
  23. }
复制代码
( v( [+ a. W; O6 p" j( k! P" z

+ R: b2 A8 m2 ^2 i" g& c可以自行编译后尝试调用查看输出/ C4 Z6 q% q' F

) w: k! K$ I  n( k7 J / l+ j8 G+ P: p. q7 y

7 V( r* h; ]  l0 M% Z: O简单的合约调用:
3 v# x; ?7 {$ N  T: D( f, g- i: D
  1. contract Salary {  O# T$ w6 }# g! X
  2.     uint public data;- C5 t4 l2 H0 `
  3.     function getData() external view returns(uint){
    2 q# |- D! Z: T3 p+ x
  4.         return data;
    1 p/ L' l, o4 l4 t) d% J  _
  5. }5 d) f" Z% {2 P  F( b( Y) `) O. c( h" O
  6. 1 Y$ c- @" I9 h7 v1 @
  7.     function setData(uint _data) external {
    : J( k$ V& n/ N- t
  8.         data = _data;6 q' {) c3 y5 ?) ^0 g' t* J
  9.     }
    5 j: {3 v& [' s/ [6 m/ `: o
  10. }
    5 c9 Z0 a) t. F& O  j8 z( D* U
复制代码
$ }6 I# g+ m4 `  c* ~

6 A7 m0 }  j0 ~8 s
: W# r& r7 T5 k) q& s$ B
  1. contract Employee {
    / U' h/ n0 x% {7 b
  2.     Salary salart;# `4 y7 U4 {. |
  3.     constructor(){
    ; r2 P, g' v6 A
  4.         salary = new Salary();, N" n' b: T9 W1 E# n
  5.     }
    ) g+ M* P+ s' _5 h* m8 p) I( J0 C) a
  6. 4 d& ~& B, S% ~
  7.     function getSalary() external view returns(uint){
    1 n( y1 w0 E2 r- Y
  8.         return salary.getData();
    / N# ]' B& J6 _# ]: y6 _" z
  9.     }4 I+ S6 U) M" G  L

  10. 8 z* `2 J: v/ [. E
  11.     function setSalaty(uint _data) external {, Y" Z/ b& u8 J% l2 x3 `) A3 M
  12.         salary.setData(_data);
    5 y+ A: A; s/ J2 _
  13.     }$ `1 U# n# i8 R& ?# ~1 A8 G; |/ k
  14. }
复制代码

  P/ r5 {6 V2 {2 V3 c1 i
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13