Abstract type: Difference between revisions

imported>Regattaguru
(3 intermediate revisions by 2 users not shown)
Line 1,012:
=={{header|EMal}}==
{{trans|Go}}
<syntaxhighlight lang="ecmascriptemal">
^|EMal doesn'tdoes not support abstract types with partial implementations,
|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="ecmascriptwren">import "./fmt" for Fmt
 
class Beast{
Anonymous user