mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
docs: add implements keyword for explicit interface implementations (#22214)
This commit is contained in:
parent
56013a443a
commit
888d84d26d
1 changed files with 26 additions and 3 deletions
29
doc/docs.md
29
doc/docs.md
|
@ -687,7 +687,7 @@ To use a format specifier, follow this pattern:
|
||||||
- width: may be an integer value describing the minimum width of total field to output.
|
- width: may be an integer value describing the minimum width of total field to output.
|
||||||
- precision: an integer value preceded by a `.` will guarantee that many digits after the decimal
|
- precision: an integer value preceded by a `.` will guarantee that many digits after the decimal
|
||||||
point without any insignificant trailing zeros. If displaying insignificant zero's is desired,
|
point without any insignificant trailing zeros. If displaying insignificant zero's is desired,
|
||||||
append a `f` specifier to the precision value (see examples below). Applies only to float
|
append a `f` specifier to the precision value (see examples below). Applies only to float
|
||||||
variables and is ignored for integer variables.
|
variables and is ignored for integer variables.
|
||||||
- type: `f` and `F` specify the input is a float and should be rendered as such, `e` and `E` specify
|
- type: `f` and `F` specify the input is a float and should be rendered as such, `e` and `E` specify
|
||||||
the input is a float and should be rendered as an exponent (partially broken), `g` and `G` specify
|
the input is a float and should be rendered as an exponent (partially broken), `g` and `G` specify
|
||||||
|
@ -3598,7 +3598,6 @@ fn main() {
|
||||||
#### Implement an interface
|
#### Implement an interface
|
||||||
|
|
||||||
A type implements an interface by implementing its methods and fields.
|
A type implements an interface by implementing its methods and fields.
|
||||||
There is no explicit declaration of intent, no "implements" keyword.
|
|
||||||
|
|
||||||
An interface can have a `mut:` section. Implementing types will need
|
An interface can have a `mut:` section. Implementing types will need
|
||||||
to have a `mut` receiver, for methods declared in the `mut:` section
|
to have a `mut` receiver, for methods declared in the `mut:` section
|
||||||
|
@ -3645,6 +3644,30 @@ fn fn1(s Foo) {
|
||||||
// }
|
// }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
There is an **optional** `implements` keyword for explicit declaration
|
||||||
|
of intent, which applies to `struct` declarations.
|
||||||
|
|
||||||
|
```v
|
||||||
|
struct PathError implements IError {
|
||||||
|
Error
|
||||||
|
path string
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (err PathError) msg() string {
|
||||||
|
return 'Failed to open path: ${err.path}'
|
||||||
|
}
|
||||||
|
|
||||||
|
fn try_open(path string) ! {
|
||||||
|
return PathError{
|
||||||
|
path: path
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
try_open('/tmp') or { panic(err) }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
#### Casting an interface
|
#### Casting an interface
|
||||||
|
|
||||||
We can test the underlying type of an interface using dynamic cast operators.
|
We can test the underlying type of an interface using dynamic cast operators.
|
||||||
|
@ -4040,7 +4063,7 @@ user := repo.find_user_by_id(7) or {
|
||||||
|
|
||||||
#### Options/results when returning multiple values
|
#### Options/results when returning multiple values
|
||||||
|
|
||||||
Only one `Option` or `Result` is allowed to be returned from a function. It is
|
Only one `Option` or `Result` is allowed to be returned from a function. It is
|
||||||
possible to return multiple values and still signal an error.
|
possible to return multiple values and still signal an error.
|
||||||
|
|
||||||
```v
|
```v
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue