Abstract type: Difference between revisions
m
→{{header|11l}}: Void
m (→{{header|Standard ML}}: Completed closing tag.) |
Alextretyak (talk | contribs) m (→{{header|11l}}: Void) |
||
(5 intermediate revisions by 3 users not shown) | |||
Line 18:
You can declare a virtual function to not have an implementation by using <code>F.virtual.abstract</code> keyword. A type containing at least one abstract virtual function cannot be instantiated.
<syntaxhighlight lang="11l">T AbstractQueue
F.virtual.abstract enqueue(Int item) ->
T PrintQueue(AbstractQueue)
F.virtual.assign enqueue(Int item) ->
print(item)</syntaxhighlight>
Line 1,013:
{{trans|Go}}
<syntaxhighlight lang="emal">
^|EMal
|but can use interfaces.
|^
Line 3,267:
Then say we have a structure ListQueue which implements queues as lists. If we write <tt>ListQueue :> QUEUE</tt>
then the queue type will be abstract, but if we write <tt>ListQueue : QUEUE</tt> or <tt>ListQueue : LIST_QUEUE</tt> it won't.
=={{header|Swift}}==
Swift uses Protocols to provide abstract type features. See [https://docs.swift.org/swift-book/documentation/the-swift-programming-language/protocols/ the docs]
A trivial example showing required properties and methods, and the means of providing a default implementation.
<syntaxhighlight lang="sml">
protocol Pet {
var name: String { get set }
var favouriteToy: String { get set }
func feed() -> Bool
func stroke() -> Void
}
extension Pet {
// Default implementation must be in an extension, not in the declaration above
func stroke() {
print("default purr")
}
}
struct Dog: Pet {
var name: String
var favouriteToy: String
// Required implementation
func feed() -> Bool {
print("more please")
return false
}
// If this were not implemented, the default from the extension above
// would be called.
func stroke() {
print("roll over")
}
}
</syntaxhighlight>
=={{header|Tcl}}==
Line 3,422 ⟶ 3,463:
The Go example, when rewritten in Wren, looks like this.
<syntaxhighlight lang="
class Beast{
|