Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
5 f* A" p* F- G: {. r
View pure修饰符:
( s; z5 g; b0 I0 L0 K使用view与pure不需要gwei8 P- p& |5 u$ H; D, H
' x* j% N7 j$ h3 f  I  A1 A; ?: w6 ]
view:不能修改链上数据只能访问) L) i9 z$ s8 {* I

8 z% e; ]1 O: V& M* v2 Zpure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用9 Q& s2 ^4 v' g+ z( V
) `& a2 X/ h) h7 P' a! B
  1. contract ViewPureExample {: }' q  c- R2 v8 \( B% j( ]
  2.     uint public age;
    * K9 s/ T& m$ j6 W: G+ X: l
  3.     function increaseAge() public{
    % J. I+ k) U) M7 p) @6 ^
  4.       age ++;/ G( ], T) G% r0 D; ?
  5. }  a: P/ }6 K; ~4 [) ?
  6. ' K% H- h* M4 B7 W$ L5 i; H% P
  7.     function GetViewAge() public view returns(uint){ //view 修饰
    ' R4 M, h" j6 B
  8.         //age ++;// 不可修改变量9 w9 |7 l' i4 E3 P
  9.         return age;
    - B/ V5 I$ c+ h1 A9 D2 m" u! t
  10. }
    % W7 z# a! Q* n$ |" |
  11. 7 X; W' J- @- C
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
    , d! @' f* S* S, b" _
  13.         age ++;& P, [- H& @  V, d
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量( A5 q3 x, _9 m2 b4 R! H
  15.     }
    1 l" h! W: a1 y. `5 R( o
  16. }
复制代码
" h# D+ T) e$ q  [" [. c
  }+ W9 U+ \- {: h
( Q% n6 D0 P. }# l" O7 S
( @: i; z/ s. l5 M
Public internal private external 方法修饰符:5 C; U8 L4 t4 V5 Z* }4 ]
public:任何地方都可以调用) [/ Z  ?: V+ g
* k, O) a$ f; ~: I, [+ @
internal:只有本sol文件调用
7 Y  I- v& o0 F) u( P2 B- a8 ]& Q% m9 g$ L! \2 r
private:只有本合约能调用
; F6 b/ q" J7 R( z+ k0 b7 J7 k9 K; W. O
external:只能从外部调用即合约外部, b% e6 x( Q( N9 }

5 |, `6 D" x/ W$ o3 R& h
5 |" D! K" m) a# ]
7 c  u. l, }' e1 |0 Z0 B# I: D
  1. contract PublicExternalPrivateInternal {
    2 ~5 \+ Q% f5 g! b2 [, J
  2.     uint age = 100;
    , u( @" J5 v# |% F7 z1 \! K% l2 U1 q
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用3 u4 o& ?$ o' s$ \" e; N
  4.         return age;
    0 a  k6 r# g) Q/ c$ ^6 L& Z3 V, [- W
  5.     }
    1 ^* V5 G$ h; K
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用- V. N9 q, s0 Z
  7.         return age;, j3 a* ]) X6 g+ p8 [2 p8 Z
  8.     }
    ) g8 d% }' V& |1 S5 e4 X

  9. " n+ Z+ ~) B. L5 b+ I
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用. R/ t" D+ v3 L% L: P
  11.         return ag;& X' l! e3 B& [9 v% h% V* O" n: a
  12.     }
    4 d, e/ O# k1 j' g5 q: ?

  13. ) Y" R9 H. A# ~0 v) X5 o+ U
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部9 _$ c4 u4 s3 W* J  i% l$ V
  15. //调用
    : R- g! ]) n7 H
  16.         return age;/ q5 D& \2 V0 e3 g8 {& F2 m
  17.     }  }& ?# X& }. D( o% h1 v. |

  18. 9 ?" @- N+ q+ i* ~# f9 a0 ^
  19.     function Callfunction() public view returns(uint){: b1 l, @& H% |# V5 o8 r
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许
    * k% i  c; w" _5 l" O" k
  21.     }
    ! }& P6 {6 a/ v
  22. 2 W' K3 d$ l- a
  23. }
复制代码
7 _; D3 Q  `$ X$ _# u( C
# W( u3 I" a# P6 Q
可以自行编译后尝试调用查看输出( U! F  H% L$ M- |( {

2 b( N+ f4 a' p; h0 L$ a 6 h7 d# Q1 k6 @: r
. Z9 f  U5 [& e* g
简单的合约调用:
' u2 U5 u0 y+ N6 B2 l. {) D
  1. contract Salary {! F2 X" o- d/ F& E$ D
  2.     uint public data;
    $ w7 C. M+ s: A% {, b' G  _6 g
  3.     function getData() external view returns(uint){* O6 S0 X% |7 Z( v1 Z1 `1 O* O+ n
  4.         return data;; k" T3 p+ V# a! h9 f; {; r
  5. }
    9 q% a5 C5 ?& Z# S- Z* A$ j0 ~
  6. : h( Q" W0 V2 K* G  k
  7.     function setData(uint _data) external {  I/ s7 i' l% {7 L; f. V) t
  8.         data = _data;4 ]* J$ f) V+ A- E' l6 d
  9.     }
      j7 i4 w$ C# s8 g( N" ?& E
  10. }
    * d, ]: b1 o/ d. G, H2 F6 n
复制代码
6 O$ {' h! r: a9 ?. x* t$ H

6 @7 {  l+ J* B
1 Y* O$ V; r. |' S5 E7 N+ I& r- b
  1. contract Employee {( l* U+ Z. M. q2 Y+ J/ z
  2.     Salary salart;4 g0 ^3 G" [! V( o
  3.     constructor(){
    * D1 n- ?: N: F7 X' H' f
  4.         salary = new Salary();
    $ H" I! ~2 o* ]! O7 L! l! D
  5.     }1 l# l% |& T+ P' G. I  h5 N$ p

  6. 7 Z' m. d7 ~( \3 Z) p2 z
  7.     function getSalary() external view returns(uint){- {; S1 m% Y: N( J- N/ g, x3 {
  8.         return salary.getData();& z% O* ~/ H: r
  9.     }
    - A! F( P' Y0 U& B3 u9 G& P4 q

  10. 5 V4 r% i, S4 M
  11.     function setSalaty(uint _data) external {: e) n+ k. p% `/ r0 [$ m2 A
  12.         salary.setData(_data);6 o4 l4 V: y) t
  13.     }
    5 \3 z4 c6 B* N1 D
  14. }
复制代码

. L( h- a7 ?4 t! L1 \
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13