Solidity-函數(shù)可見性與修飾符

Solidity提供了四種可見性 . 分別是external,public,internal,private . 其中函數(shù)默認(rèn)是public . 狀態(tài)變量默認(rèn)的可見性是internal .

function () { public| private | internal | external } [ pure | constant | view | payable ] [ returns () ]

一 . 可見性

1 . public

使函數(shù)和狀態(tài)變量 , 在當(dāng)前合約內(nèi)和被繼承的合約內(nèi)都可以訪問 . 并且使函數(shù)和狀態(tài)變量成為合約對(duì)外接口.

2 . private

使函數(shù)和狀態(tài)變量 , 僅在當(dāng)前合約內(nèi)可以訪問 . 在繼承的合約內(nèi)不可訪問 .

3 . external

外部函數(shù)是合約接口的一部分 , 所以我們可以從其它合約或通過交易來發(fā)起調(diào)用 . 一個(gè)外部函數(shù)f , 不能通過內(nèi)部的方式來發(fā)起調(diào)用 , (如f()不可以膝昆,但可以通過this.f()) . 外部函數(shù)在接收大的數(shù)組數(shù)據(jù)時(shí)更加有效。

4 . internal

這樣聲明的函數(shù)和狀態(tài)變量只能通過內(nèi)部(internal)訪問 . 如在當(dāng)前合約中調(diào)用 , 或繼承的合約里調(diào)用 . 需要注意的是不能加前綴this , 前綴this是表示通過外部(external)方式訪問 .

二 . 修飾符

1 . pure

函數(shù)指定view,代表函數(shù)不能讀取或修改區(qū)塊鏈狀態(tài) .

下列操作被認(rèn)為是讀取區(qū)塊鏈狀態(tài) :

獲取狀態(tài)變量 .

訪問this.balance或.balance .

訪問任何block , tx , msg的成員 . (除了msg.sig和msg.data以外)?

調(diào)用任何未標(biāo)記為pure的函數(shù) .

使用包含特定操作碼的內(nèi)聯(lián)程序集 .

2 . view

函數(shù)指定view,代表函數(shù)可以讀取區(qū)塊鏈狀態(tài) , 但不能修改區(qū)塊鏈的狀態(tài).

下列操作被認(rèn)為是修改區(qū)塊鏈狀態(tài) :

狀態(tài)變量賦值 .

觸發(fā)事件 .

創(chuàng)建其他合同 .

使用selfdestruct .

通過調(diào)用發(fā)送Ether .

調(diào)用任何未標(biāo)記的view或pure的函數(shù) .

使用低級(jí)調(diào)用 .

使用包含特定操作碼的內(nèi)聯(lián)程序集 .

3 . constant

函數(shù)指定constant , 與指定view是一個(gè)意思 . constant 被稱為view的別名.

狀態(tài)變量被指定constant ,代表它必須在編譯時(shí)被賦值 .

4 . payable

函數(shù)指定了payable才能拿獲取msg.value , 接收以太幣 .

三 . 自定義修飾符

modifier可以用來輕易的改變一個(gè)函數(shù)的行為.可被繼承千劈,同時(shí)還可被派生的合約重寫(override)


腦洞自制實(shí)例, 僅供娛樂:?

pragma solidity ^0.4.21;

contract OneNightInSupermarket{

? ? address admin; // 管理員

? ? uint minimumCharge; // 最低消費(fèi)標(biāo)準(zhǔn)

? ? function OneNightInSupermarket(uint _initialMinimum)public{

? ? ? ? admin= msg.sender;

? ? ? ? minimumCharge= _initialMinimum;

? ? }

? ? // 發(fā)送交易的是管理員嗎?

? ? modifier AdminIsSender {

? ? ? ? require(admin==msg.sender);

? ? ? ? _;

? ? }

? ? // 消費(fèi)是否高于最低消費(fèi)

? ? modifier MinimumCharge(uint _price){

? ? ? ? require(msg.value >= _price);

? ? ? ? _;

? ? }

? ? // 誰是管理員

? ? function IamAdmin() public view AdminIsSender returns(address) {

? ? ? ? return msg.sender;

? ? }

? ? // 普通用戶消費(fèi),有最低消費(fèi)標(biāo)準(zhǔn)

? ? function AverageConsumption() public payable AdminIsSender MinimumCharge(minimumCharge) returns(uint,uint) {

? ? ? ? return (msg.value, minimumCharge);

? ? }

? ? // 管理員隨便花,沒有最低消費(fèi)標(biāo)準(zhǔn)

? ? function AdminConsumption() public payable AdminIsSender returns(uint) {

? ? ? ? return msg.value;

? ? }

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盘榨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杀餐,更是在濱河造成了極大的恐慌广恢,老刑警劉巖薯鼠,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫉沽,死亡現(xiàn)場(chǎng)離奇詭異辟犀,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)绸硕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門堂竟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魂毁,“玉大人,你說我怎么就攤上這事出嘹∠” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵税稼,是天一觀的道長(zhǎng)酣胀。 經(jīng)常有香客問我,道長(zhǎng)娶聘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任甚脉,我火速辦了婚禮丸升,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牺氨。我一直安慰自己狡耻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布猴凹。 她就那樣靜靜地躺著夷狰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪郊霎。 梳的紋絲不亂的頭發(fā)上沼头,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音书劝,去河邊找鬼进倍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛购对,可吹牛的內(nèi)容都是我干的猾昆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼骡苞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼垂蜗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起解幽,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤贴见,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后躲株,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蝇刀,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年徘溢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吞琐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捆探。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖站粟,靈堂內(nèi)的尸體忽然破棺而出黍图,到底是詐尸還是另有隱情,我是刑警寧澤奴烙,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布助被,位于F島的核電站,受9級(jí)特大地震影響切诀,放射性物質(zhì)發(fā)生泄漏揩环。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一幅虑、第九天 我趴在偏房一處隱蔽的房頂上張望丰滑。 院中可真熱鬧,春花似錦倒庵、人聲如沸褒墨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郁妈。三九已至,卻和暖如春绍申,著一層夾襖步出監(jiān)牢的瞬間噩咪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工极阅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剧腻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓涂屁,卻偏偏與公主長(zhǎng)得像书在,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拆又,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容