本文整理了Java中org.graalvm.polyglot.Value
类的一些代码示例,展示了Value
类的具体用法。这些代码示例主要来源于Github
/Stackoverflow
/Maven
等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Value
类的具体详情如下:
包路径:org.graalvm.polyglot.Value
类名称:Value
[英]Represents a polyglot value that can be accessed using a set of language agnostic operations. Polyglot values represent values from #isHostObject() or guest language. Polyglot values are bound to a Context. If the context is closed then all value operations throw an IllegalStateException.
Polyglot values have one of the following types:
#isNull(): This value represents a null
like value. Certain languages might use a different name or use multiple values to represent null
like values.
#isNumber(): This value represents a floating or fixed point number. The number value may be accessed as #asByte(), #asShort() #asInt() #asLong(), #asFloat() or #asDouble() value.
#isBoolean(). This value represents a boolean value. The boolean value can be accessed using #asBoolean().
#isString(): This value represents a string value. The string value can be accessed using #asString().
#isHostObject(): This value represents a value of the host language (Java). The original Java value can be accessed using #asHostObject().
#isProxyObject(): This value represents a Proxy value.
#isNativePointer(): This value represents a native pointer. The native pointer value can be accessed using #asNativePointer().
In addition any value may have one or more of the following traits:
#hasArrayElements(): This value may contain array elements. The array indices always start with 0
, also if the language uses a different style.
#hasMembers(): This value may contain members. Members are structural elements of an object. For example, the members of a Java object are all public methods and fields. Members are accessible using #getMember(String).
#canExecute(): This value can be #execute(Object...). This indicates that the value represents an element that can be executed. Guest language examples for executable elements are functions, methods, closures or promises.
#canInstantiate(): This value can be #newInstance(Object...). For example, Java classes are instantiable.
In addition to the language agnostic types, the language specific type can be accessed using #getMetaObject(). The identity of value objects is unspecified and should not be relied upon. For example, multiple calls to #getArrayElement(long) with the same index might return the same or different instances of Value. The #equals(Object) of values is based on the identity of the value instance. All values return a human-readable #toString() for debugging, formatted by the original language.
Polyglot values may be converted to host objects using #as(Class). In addition values may be created from Java values using Context#asValue(Object).
[中]表示可以使用一组语言无关操作访问的多语言值。Polyglot值表示来自#isHostObject()或来宾语言的值。Polyglot值绑定到上下文。如果上下文是关闭的,那么所有的值操作都会抛出一个IllegalStateException。
Polyglot值具有以下类型之一:
*#isNull():此值表示类似null
的值。某些语言可能使用不同的名称或使用多个值来表示类似null
的值。
*#isNumber():此值表示浮点数或固定点数。该数值可以作为#asByte()、#asShort()#asInt()#asLong()、#asFloat()或#asDouble()值访问。
*#isBoolean()。此值表示布尔值。可以使用#asBoolean()访问布尔值。
*#isString():此值表示字符串值。可以使用#asString()访问字符串值。
*#ishosObject():此值表示宿主语言(Java)的值。可以使用#asHostObject()访问原始Java值。
*#isProxyObject():此值表示代理值。
*#isNativePointer():此值表示本机指针。可以使用#asNativePointer()访问本机指针值。
此外,任何值都可能具有以下一个或多个特征:
*#hasArrayElements():此值可能包含数组元素。数组索引总是以0
开头,如果语言使用不同的样式也是如此。
*#hasMembers():此值可能包含成员。构件是对象的结构图元。例如,Java对象的成员都是公共方法和字段。可以使用#getMember(字符串)访问成员。
*#canExecute():此值可以是#execute(Object…)。这表示该值表示可以执行的元素。可执行元素的来宾语言示例包括函数、方法、闭包或承诺。
*#canInstantiate():此值可以是#newInstance(Object…)。例如,Java类是可实例化的。
除了与语言无关的类型外,还可以使用#getMetaObject()访问特定于语言的类型。价值对象的身份未指定,不应依赖。例如,使用同一索引多次调用#getArrayElement(long)可能会返回相同或不同的值实例。值的#equals(Object)基于值实例的标识。所有值都返回一个可读的#toString()进行调试,格式为原始语言。
Polyglot值可以使用#as(类)转换为宿主对象。此外,可以使用上下文#asValue(Object)从Java值创建值。
代码示例来源:origin: reactiverse/es4x
@Override
public Object transform(T jsObject) {
final Value value = Value.asValue(jsObject);
if (value.isHostObject() || value.isString() || value.isNumber() || value.isBoolean() || value.isNativePointer() || value.isProxyObject()) {
throw new ClassCastException("type is not Object or Array");
}
if (value.isNull()) {
return null;
}
final Context ctx = Context.getCurrent();
String encoded = ctx.eval(stringify).execute(value).asString();
char c = encoded.charAt(0);
// encoded messages are expected not to be pretty printed
if (c == '{') {
return new JsonObject(encoded);
}
if (c == '[') {
return new JsonArray(encoded);
}
throw new ClassCastException("type is not Object or Array");
}
}
代码示例来源:origin: com.oracle.truffle/truffle-api
@Override
public <T> T as(Object receiver, Class<T> targetType) {
return delegateBindings.as(targetType);
}
代码示例来源:origin: org.graalvm/graal-sdk
public void putMember(String key, Value value) {
values.put(key, value.isHostObject() ? value.asHostObject() : value);
}
代码示例来源:origin: reactiverse/es4x
@Override
public Value invokeMethod(Value thiz, String method, Object... args) {
Value fn = thiz.getMember(method);
if (fn != null && !fn.isNull()) {
return fn.execute(args);
}
return null;
}
代码示例来源:origin: reactiverse/es4x
@Override
public Value require(String main) {
return bindings.getMember("require").execute(main);
}
代码示例来源:origin: org.graalvm.sdk/polyglot-tck
if (value.isNull()) {
descs.add(NULL);
if (value.isBoolean()) {
descs.add(BOOLEAN);
if (value.isNumber()) {
descs.add(NUMBER);
if (value.isString()) {
descs.add(STRING);
if (value.isNativePointer()) {
descs.add(NATIVE_POINTER);
if (value.hasArrayElements()) {
final Set<TypeDescriptor> contentTypes = new HashSet<>();
for (int i = 0; i < value.getArraySize(); i++) {
final TypeDescriptor contentType = forValue(value.getArrayElement(i));
if (contentType != NULL) {
contentTypes.add(contentType);
if (value.hasMembers()) {
descs.add(OBJECT);
if (value.isHostObject()) {
descs.add(HOST_OBJECT);
if (value.canExecute()) {
代码示例来源:origin: org.graalvm.truffle/truffle-tck
public void accessFieldsOfJavaObject() {
Source src = Source.newBuilder("js", "" +
"(function(t) {\n" +
" return 3600 * t.hours + 60 * t.minutes + t.seconds;\n" +
"})\n",
"MomentToSeconds.js").buildLiteral();
final Moment javaMoment = new Moment(6, 30, 10);
// Evaluate the JavaScript function definition
Value jsFunction = context.eval(src);
// Execute the JavaScript function, passing a Java object argument
Value jsSeconds = jsFunction.execute(javaMoment);
// Convert foreign object result to desired Java type
int seconds = jsSeconds.as(Number.class).intValue();
assertEquals(3600 * 6 + 30 * 60 + 10, seconds);
}
// END: com.oracle.truffle.tck.impl.PolyglotEngineWithJavaScript#accessFieldsOfJavaObject
代码示例来源:origin: com.oracle.truffle/truffle-tck
@Override
public void evaluate() throws Throwable {
Context prevContext = rule.context;
try (Context context = Context.create()) {
rule.context = context;
context.initialize("truffletestinvoker");
context.enter();
Env prevEnv = rule.testEnv;
try {
rule.testEnv = context.getPolyglotBindings().getMember("env").asHostObject();
stmt.evaluate();
} catch (Throwable t) {
throw t;
} finally {
rule.testEnv = prevEnv;
context.leave();
}
} finally {
rule.context = prevContext;
}
}
代码示例来源:origin: org.graalvm.truffle/truffle-api
@Override
public String toString(Object receiver) {
return delegateBindings.toString();
}
代码示例来源:origin: org.graalvm/graal-sdk
/**
* @since 1.0
* @deprecated use {@link #getPolyglotBindings()}.{@link Value#getMember(String) getMember}
* instead.
*/
@Deprecated
public Value importSymbol(String name) {
return impl.getPolyglotBindings().getMember(name);
}
代码示例来源:origin: reactiverse/es4x
@Override
public Value invokeFunction(String function, Object... args) {
return context.eval("js", function).execute(args);
}
代码示例来源:origin: org.graalvm/polyglot-tck
if (value.isNull()) {
descs.add(NULL);
if (value.isBoolean()) {
descs.add(BOOLEAN);
if (value.isNumber()) {
descs.add(NUMBER);
if (value.isString()) {
descs.add(STRING);
if (value.isNativePointer()) {
descs.add(NATIVE_POINTER);
if (value.hasArrayElements()) {
final Set<TypeDescriptor> contentTypes = new HashSet<>();
for (int i = 0; i < value.getArraySize(); i++) {
final TypeDescriptor contentType = forValue(value.getArrayElement(i));
if (contentType != NULL) {
contentTypes.add(contentType);
if (value.hasMembers()) {
descs.add(OBJECT);
if (value.isHostObject()) {
descs.add(HOST_OBJECT);
if (value.canExecute()) {
代码示例来源:origin: com.oracle.truffle/truffle-tck
public void accessFieldsOfJavaObject() {
Source src = Source.newBuilder("js", "" +
"(function(t) {\n" +
" return 3600 * t.hours + 60 * t.minutes + t.seconds;\n" +
"})\n",
"MomentToSeconds.js").buildLiteral();
final Moment javaMoment = new Moment(6, 30, 10);
// Evaluate the JavaScript function definition
Value jsFunction = context.eval(src);
// Execute the JavaScript function, passing a Java object argument
Value jsSeconds = jsFunction.execute(javaMoment);
// Convert foreign object result to desired Java type
int seconds = jsSeconds.as(Number.class).intValue();
assertEquals(3600 * 6 + 30 * 60 + 10, seconds);
}
// END: com.oracle.truffle.tck.impl.PolyglotEngineWithJavaScript#accessFieldsOfJavaObject
代码示例来源:origin: org.graalvm.truffle/truffle-tck
@Override
public void evaluate() throws Throwable {
Context prevContext = rule.context;
try (Context context = rule.contextBuilder.build()) {
rule.context = context;
context.initialize("truffletestinvoker");
context.enter();
Env prevEnv = rule.testEnv;
try {
rule.testEnv = context.getPolyglotBindings().getMember("env").asHostObject();
stmt.evaluate();
} catch (Throwable t) {
throw t;
} finally {
rule.testEnv = prevEnv;
context.leave();
}
} finally {
rule.context = prevContext;
}
}
代码示例来源:origin: com.oracle.truffle/truffle-api
@Override
public String toString() {
EngineSupport engine = JavaInterop.ACCESSOR.engine();
if (engine != null) {
try {
return engine.toHostValue(guestObject, languageContext).toString();
} catch (UnsupportedOperationException e) {
return super.toString();
}
} else {
return super.toString();
}
}
代码示例来源:origin: org.graalvm/graal-sdk
/**
* @since 1.0
* @deprecated use {@link #getBindings(String) getBindings(languageId)}.
* {@link Value#getMember(String) getMember(symbol)} instead.
*/
@Deprecated
public Value lookup(String languageId, String symbol) {
return getBindings(languageId).getMember(symbol);
}
代码示例来源:origin: reactiverse/es4x
).execute(callback);
代码示例来源:origin: reactiverse/es4x
@Override
public void encodeToWire(Buffer buffer, T jsObject) {
final Value value = Value.asValue(jsObject);
if (value.isHostObject() || value.isString() || value.isNumber() || value.isBoolean() || value.isNativePointer() || value.isProxyObject()) {
throw new ClassCastException("type is not Object or Array");
}
if (value.isNull()) {
buffer.appendInt(0);
return;
}
final Context ctx = Context.getCurrent();
Buffer encoded = Buffer.buffer(ctx.eval(stringify).execute(value).asString());
buffer.appendInt(encoded.length());
buffer.appendBuffer(buffer);
}
代码示例来源:origin: com.oracle.truffle/truffle-tck
Value jsFactory = jsFunction.execute();
Incrementor initFive = jsFactory.execute(5).as(Incrementor.class);
Incrementor initTen = jsFactory.execute(10).as(Incrementor.class);
代码示例来源:origin: org.graalvm.sdk/graal-sdk
public void putMember(String key, Value value) {
values.put(key, value.isHostObject() ? value.asHostObject() : value);
}
内容来源于网络,如有侵权,请联系作者删除!