mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Update documentation for multi variable declaration statement.
This commit is contained in:
parent
c781baf733
commit
6c8f78fb8f
@ -272,9 +272,12 @@ Assignment
|
|||||||
Destructuring Assignments and Returning Multiple Values
|
Destructuring Assignments and Returning Multiple Values
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
|
||||||
Solidity internally allows tuple types, i.e. a list of objects of potentially different types whose size is a constant at compile-time. Those tuples can be used to return multiple values at the same time and also assign them to multiple variables (or LValues in general) at the same time::
|
Solidity internally allows tuple types, i.e. a list of objects of potentially different types whose size is a constant at compile-time. Those tuples can be used to return multiple values at the same time.
|
||||||
|
These can then either be assigned to newly declared variables or to pre-existing variables (or LValues in general):
|
||||||
|
|
||||||
pragma solidity ^0.4.16;
|
::
|
||||||
|
|
||||||
|
pragma solidity >0.4.23 <0.5.0;
|
||||||
|
|
||||||
contract C {
|
contract C {
|
||||||
uint[] data;
|
uint[] data;
|
||||||
@ -284,12 +287,8 @@ Solidity internally allows tuple types, i.e. a list of objects of potentially di
|
|||||||
}
|
}
|
||||||
|
|
||||||
function g() public {
|
function g() public {
|
||||||
// Variables declared with type
|
// Variables declared with type and assigned from the returned tuple.
|
||||||
uint x;
|
(uint x, bool b, uint y) = f();
|
||||||
bool b;
|
|
||||||
uint y;
|
|
||||||
// Tuple values can be assigned to these pre-existing variables
|
|
||||||
(x, b, y) = f();
|
|
||||||
// Common trick to swap values -- does not work for non-value storage types.
|
// Common trick to swap values -- does not work for non-value storage types.
|
||||||
(x, y) = (y, x);
|
(x, y) = (y, x);
|
||||||
// Components can be left out (also for variable declarations).
|
// Components can be left out (also for variable declarations).
|
||||||
@ -330,7 +329,9 @@ A variable declared anywhere within a function will be in scope for the *entire
|
|||||||
(this will change soon, see below).
|
(this will change soon, see below).
|
||||||
This happens because Solidity inherits its scoping rules from JavaScript.
|
This happens because Solidity inherits its scoping rules from JavaScript.
|
||||||
This is in contrast to many languages where variables are only scoped where they are declared until the end of the semantic block.
|
This is in contrast to many languages where variables are only scoped where they are declared until the end of the semantic block.
|
||||||
As a result, the following code is illegal and cause the compiler to throw an error, ``Identifier already declared``::
|
As a result, the following code is illegal and cause the compiler to throw an error, ``Identifier already declared``:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
// This will not compile
|
// This will not compile
|
||||||
|
|
||||||
|
@ -203,7 +203,7 @@ situation.
|
|||||||
|
|
||||||
If you do not want to throw, you can return a pair::
|
If you do not want to throw, you can return a pair::
|
||||||
|
|
||||||
pragma solidity ^0.4.16;
|
pragma solidity >0.4.23 <0.5.0;
|
||||||
|
|
||||||
contract C {
|
contract C {
|
||||||
uint[] counters;
|
uint[] counters;
|
||||||
@ -219,7 +219,7 @@ If you do not want to throw, you can return a pair::
|
|||||||
}
|
}
|
||||||
|
|
||||||
function checkCounter(uint index) public view {
|
function checkCounter(uint index) public view {
|
||||||
var (counter, error) = getCounter(index);
|
(uint counter, bool error) = getCounter(index);
|
||||||
if (error) {
|
if (error) {
|
||||||
// ...
|
// ...
|
||||||
} else {
|
} else {
|
||||||
|
@ -78,7 +78,7 @@ Break = 'break'
|
|||||||
Return = 'return' Expression?
|
Return = 'return' Expression?
|
||||||
Throw = 'throw'
|
Throw = 'throw'
|
||||||
EmitStatement = 'emit' FunctionCall
|
EmitStatement = 'emit' FunctionCall
|
||||||
VariableDefinition = ('var' IdentifierList | VariableDeclaration) ( '=' Expression )?
|
VariableDefinition = ('var' IdentifierList | VariableDeclaration | '(' VariableDeclaration? (',' VariableDeclaration? )* ')' ) ( '=' Expression )?
|
||||||
IdentifierList = '(' ( Identifier? ',' )* Identifier? ')'
|
IdentifierList = '(' ( Identifier? ',' )* Identifier? ')'
|
||||||
|
|
||||||
// Precedence by order (see github.com/ethereum/solidity/pull/732)
|
// Precedence by order (see github.com/ethereum/solidity/pull/732)
|
||||||
|
@ -388,7 +388,7 @@ high or low invalid bids.
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
pragma solidity ^0.4.22;
|
pragma solidity >0.4.23 <0.5.0;
|
||||||
|
|
||||||
contract BlindAuction {
|
contract BlindAuction {
|
||||||
struct Bid {
|
struct Bid {
|
||||||
@ -467,8 +467,8 @@ high or low invalid bids.
|
|||||||
|
|
||||||
uint refund;
|
uint refund;
|
||||||
for (uint i = 0; i < length; i++) {
|
for (uint i = 0; i < length; i++) {
|
||||||
var bid = bids[msg.sender][i];
|
Bid storage bid = bids[msg.sender][i];
|
||||||
var (value, fake, secret) =
|
(uint value, bool fake, bytes32 secret) =
|
||||||
(_values[i], _fake[i], _secret[i]);
|
(_values[i], _fake[i], _secret[i]);
|
||||||
if (bid.blindedBid != keccak256(value, fake, secret)) {
|
if (bid.blindedBid != keccak256(value, fake, secret)) {
|
||||||
// Bid was not actually revealed.
|
// Bid was not actually revealed.
|
||||||
|
Loading…
Reference in New Issue
Block a user