Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文
* `7 q/ C8 I0 k% V
View pure修饰符:
; b* r; E1 r+ O( h3 \9 r7 @使用view与pure不需要gwei
! }) L& T( I6 p! L0 H+ A
6 d" H9 F( H. lview:不能修改链上数据只能访问8 t3 [' ^2 o+ D/ [
% d* i# }* n. @: c
pure:不能访问链上数据,被修饰的方法里的变量只能在方法内使用
$ x- x% v& j9 H0 V5 `; T# r. Y
, j' X8 Q8 t/ O6 M! s$ _; a6 b
  1. contract ViewPureExample {
    6 ^3 C: U; ]1 f% `) f, h; s5 M0 a* l
  2.     uint public age;
    + Q; T; `, `: t7 u# y
  3.     function increaseAge() public{
    , ^; D& A; n; @* \
  4.       age ++;' }5 s6 O0 X9 n  _
  5. }) p3 \+ l4 i: v; _: n% ^, S) p
  6. 6 i$ L6 `: |8 n3 w' J/ [% {! b
  7.     function GetViewAge() public view returns(uint){ //view 修饰
    # S# I4 y" O- Q3 S  S
  8.         //age ++;// 不可修改变量
    3 ~/ K3 k- g. L, _0 V& L
  9.         return age;
    ' U% P+ ?2 y# b# @! _
  10. }2 R% X4 f6 C8 G- O8 ~/ p

  11. + a% A( `3 x3 x8 U
  12. function GetPureAge(uint age) public pure returns(uint){ //因为pure方法 所以需要设置参数
    7 {4 H0 X( M  c/ m9 T+ l
  13.         age ++;
    5 s& [) [  o7 I# A+ X0 j- y6 V
  14.         return age;//如果直接return会直接报错  因为pure修饰 所以不能访问方法外的变量
    6 \1 E& o+ W0 b: G
  15.     }
    9 \0 M% \. @( h% [( D# N( F
  16. }
复制代码

/ F# u5 r+ {3 m' t& D" Q$ x( L: E
8 t) W3 c  M: j$ l8 H* d( L! P
- h3 J" I7 q% P# N& z
$ t: H/ e, J+ j4 O+ e/ l* YPublic internal private external 方法修饰符:+ D6 \0 F7 [. U5 n$ d8 m; N: U
public:任何地方都可以调用' D. l, f6 v: @/ i4 v# v
% @+ `, m2 Q2 O/ ]
internal:只有本sol文件调用
& q! T1 a/ H. [0 _0 |& D: ^4 O: d; N, l
private:只有本合约能调用
$ Z- b' U* ~" O4 {
! P7 I, e' @9 G# a" G# u9 aexternal:只能从外部调用即合约外部# @( M! @9 \0 R; U9 n/ M) P
: L6 i1 K$ U+ [' b* g

1 Z% t$ v2 S! ]( E+ }+ ?1 j  U% I( D* {- n/ D% F! @
  1. contract PublicExternalPrivateInternal {
      V. }3 ?+ A$ i3 E8 b7 G! V
  2.     uint age = 100;
    6 S$ ~# P- J1 I' O) T, [# D4 Z
  3.     function GetAgeWithPublic() public view returns(uint){  //外部内部都可调用
    3 p8 |- q( ~& S# F
  4.         return age;( Y% D* C, _, f
  5.     }
    . |0 g7 e% s5 o' p9 u; i0 q! w% R# B
  6.     function GetAgeWithInternal() internal view returns(uint){ // 本sol文件调用9 z; n9 m( D, N" Z
  7.         return age;
    % y& j+ ~- Y* B! \" f  \
  8.     }  P6 S$ E, Z# _: M; ~

  9. ) V. Y5 c4 I* U6 M+ P. U
  10.     function GetAgeWithPrivate() private view returns(uint){ //本合约调用# `7 e& T2 b8 }. t% l* X
  11.         return ag;
    + x. o$ r8 R$ y: h4 ?) |
  12.     }
    8 S- ]/ f4 `. b% h5 F
  13. ) ]* l! \  E5 C3 ?& R7 M7 r
  14. function GetAgeWithExternal() external view returns(uint){ //只能外部
    9 _. K$ n! U+ X3 r% v
  15. //调用% ]5 r9 W+ Y4 a; x8 B9 e# Y( \: j
  16.         return age;
    , k1 ]1 d7 y' ^, X) p; w7 g
  17.     }
    7 a0 e1 d! j& K3 J# ]
  18. " N4 T1 n3 e7 a6 Q$ G4 _
  19.     function Callfunction() public view returns(uint){" ?( c6 J. M$ i# l' e
  20.         return GetAgeWithPrivate();//方法可以调用方法只要被调用的方法允许: P5 b# i% j' F5 y1 G  `
  21.     }
    0 ~' J+ _0 X: x6 c. v

  22. % i. v( W4 c$ d9 V
  23. }
复制代码

6 ^; k( l$ L! A) L' F( `' J
+ |' b6 S! V  y& g9 o* c可以自行编译后尝试调用查看输出9 t* n; D. P% @9 u# U) l
" S" e2 o6 T4 F/ Q0 q) K9 L& ]

. F* Q6 g/ G4 N2 b1 i- @, K7 B5 ~# q% @* y+ Y2 v, ~
简单的合约调用:0 _) W" P1 V( e. o& k* }
  1. contract Salary {
    3 |6 r. e$ _( b) \; ~
  2.     uint public data;2 a) s) Q% _8 h/ G7 Q* f
  3.     function getData() external view returns(uint){! B' v: U  ^  g; }
  4.         return data;6 a, P, U1 d$ Q
  5. }
    % @& q) ^. `2 v& L4 b: b( u" ]9 `
  6. ! G0 r: l/ B! t
  7.     function setData(uint _data) external {
    0 L) M/ s; m  }4 r
  8.         data = _data;* H( Y# L) U! Q
  9.     }
    5 [/ M! t6 U2 F! O& p6 A4 Y' E( g9 \
  10. }, U  D) O% e8 t  S7 Y# d
复制代码

5 V7 b, R8 N& a. t, B0 A2 Z. H ! T! A& y: Y0 I5 M

$ s. s+ L/ i" m
  1. contract Employee {
    + i( o9 ?) ]4 [* l0 U) Z' m
  2.     Salary salart;
    + B" Y) _" g  {0 M
  3.     constructor(){9 O/ b- R" m2 @$ a4 [( b
  4.         salary = new Salary();
    ' L, D0 r! ]4 R! y+ W
  5.     }
    9 J. G- ?+ V2 G0 P$ q$ ~; B

  6. . I* X. v1 N8 _, a) ]% g; D
  7.     function getSalary() external view returns(uint){
    % p5 z( L: O. H$ |! F
  8.         return salary.getData();
      \4 E8 l5 x0 i% q3 J6 T' @% ]2 I
  9.     }
    . B: N8 j, K- w3 b9 p
  10. * Z8 M9 x+ [& s0 z& U" w
  11.     function setSalaty(uint _data) external {
    ; A3 C, q+ P, p) `0 ?, i  T$ _
  12.         salary.setData(_data);
    $ k3 ]3 K% w) _* w+ F' q
  13.     }
    0 i9 `$ \/ x0 S1 V- u0 a* D' a
  14. }
复制代码

+ D' G% ~; \* @6 M/ f. ?9 y  r
BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

成为第一个吐槽的人

李悔之2015 初中生
  • 粉丝

    1

  • 关注

    0

  • 主题

    13