org.graalvm.polyglot.Value类的使用及代码示例

x33g5p2x  于2022-02-01 转载在 其他  
字(10.5k)|赞(0)|评价(0)|浏览(506)

本文整理了Java中org.graalvm.polyglot.Value类的一些代码示例,展示了Value类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Value类的具体详情如下:
包路径:org.graalvm.polyglot.Value
类名称: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);
}

相关文章