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
|
||||
-------------------------------------------------------
|
||||
|
||||
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 {
|
||||
uint[] data;
|
||||
@ -284,12 +287,8 @@ Solidity internally allows tuple types, i.e. a list of objects of potentially di
|
||||
}
|
||||
|
||||
function g() public {
|
||||
// Variables declared with type
|
||||
uint x;
|
||||
bool b;
|
||||
uint y;
|
||||
// Tuple values can be assigned to these pre-existing variables
|
||||
(x, b, y) = f();
|
||||
// Variables declared with type and assigned from the returned tuple.
|
||||
(uint x, bool b, uint y) = f();
|
||||
// Common trick to swap values -- does not work for non-value storage types.
|
||||
(x, y) = (y, x);
|
||||
// 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 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.
|
||||
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
|
||||
|
||||
|
@ -203,7 +203,7 @@ situation.
|
||||
|
||||
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 {
|
||||
uint[] counters;
|
||||
@ -219,7 +219,7 @@ If you do not want to throw, you can return a pair::
|
||||
}
|
||||
|
||||
function checkCounter(uint index) public view {
|
||||
var (counter, error) = getCounter(index);
|
||||
(uint counter, bool error) = getCounter(index);
|
||||
if (error) {
|
||||
// ...
|
||||
} else {
|
||||
|
@ -78,7 +78,7 @@ Break = 'break'
|
||||
Return = 'return' Expression?
|
||||
Throw = 'throw'
|
||||
EmitStatement = 'emit' FunctionCall
|
||||
VariableDefinition = ('var' IdentifierList | VariableDeclaration) ( '=' Expression )?
|
||||
VariableDefinition = ('var' IdentifierList | VariableDeclaration | '(' VariableDeclaration? (',' VariableDeclaration? )* ')' ) ( '=' Expression )?
|
||||
IdentifierList = '(' ( Identifier? ',' )* Identifier? ')'
|
||||
|
||||
// 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 {
|
||||
struct Bid {
|
||||
@ -467,8 +467,8 @@ high or low invalid bids.
|
||||
|
||||
uint refund;
|
||||
for (uint i = 0; i < length; i++) {
|
||||
var bid = bids[msg.sender][i];
|
||||
var (value, fake, secret) =
|
||||
Bid storage bid = bids[msg.sender][i];
|
||||
(uint value, bool fake, bytes32 secret) =
|
||||
(_values[i], _fake[i], _secret[i]);
|
||||
if (bid.blindedBid != keccak256(value, fake, secret)) {
|
||||
// Bid was not actually revealed.
|
||||
|
Loading…
Reference in New Issue
Block a user