mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 00:34:20 +03:00
Добавлен std::default
This commit is contained in:
parent
a30ca2fd4d
commit
9540834d2f
@ -26,6 +26,7 @@ public final class std implements Module {
|
|||||||
Functions.set("thread", new std_thread());
|
Functions.set("thread", new std_thread());
|
||||||
Functions.set("sync", new std_sync());
|
Functions.set("sync", new std_sync());
|
||||||
Functions.set("try", new std_try());
|
Functions.set("try", new std_try());
|
||||||
|
Functions.set("default", new std_default());
|
||||||
|
|
||||||
// Numbers
|
// Numbers
|
||||||
Functions.set("toHexString", NumberFunctions::toHexString);
|
Functions.set("toHexString", NumberFunctions::toHexString);
|
||||||
|
@ -0,0 +1,38 @@
|
|||||||
|
package com.annimon.ownlang.modules.std;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.Arguments;
|
||||||
|
import com.annimon.ownlang.lib.ArrayValue;
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.MapValue;
|
||||||
|
import com.annimon.ownlang.lib.Types;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
|
||||||
|
public final class std_default implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
Arguments.check(2, args.length);
|
||||||
|
if (isEmpty(args[0])) {
|
||||||
|
return args[1];
|
||||||
|
}
|
||||||
|
return args[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isEmpty(Value value) {
|
||||||
|
if (value == null || value.raw() == null) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
switch (value.type()) {
|
||||||
|
case Types.NUMBER:
|
||||||
|
return (value.asInt() == 0);
|
||||||
|
case Types.STRING:
|
||||||
|
return (value.asString().isEmpty());
|
||||||
|
case Types.ARRAY:
|
||||||
|
return ((ArrayValue) value).size() == 0;
|
||||||
|
case Types.MAP:
|
||||||
|
return ((MapValue) value).size() == 0;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
19
src/test/resources/modules/std/default.own
Normal file
19
src/test/resources/modules/std/default.own
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
use "std"
|
||||||
|
|
||||||
|
def testDefaultNumber() {
|
||||||
|
assertEquals(123, default(0, 123))
|
||||||
|
}
|
||||||
|
|
||||||
|
def testDefaultString() {
|
||||||
|
assertEquals("123", default("", "123"))
|
||||||
|
}
|
||||||
|
|
||||||
|
def testDefaultNull() {
|
||||||
|
use "java"
|
||||||
|
assertEquals("not null", default(null, "not null"))
|
||||||
|
}
|
||||||
|
|
||||||
|
def testOperatorOverloading() {
|
||||||
|
def `?:`(a, b) = default(a, b)
|
||||||
|
assertEquals("not null", "" ?: "not null")
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user