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("sync", new std_sync());
|
||||
Functions.set("try", new std_try());
|
||||
Functions.set("default", new std_default());
|
||||
|
||||
// Numbers
|
||||
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