ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#中v8引擎

2022-03-09 11:32:55  阅读:387  来源: 互联网

标签:engine Execute Console lib C# System 引擎 WriteLine v8


V8引擎的样例。来源于ClearScript的github上的例子。

 

以下例子足以满足大部分需求。

using System;
using Microsoft.ClearScript;
using Microsoft.ClearScript.JavaScript;

using Microsoft.ClearScript.V8;


// create a script engine

using (var engine = new V8ScriptEngine())

{

    // expose a host type

    engine.AddHostType("Console", typeof(Console));

    engine.Execute("Console.WriteLine('{0} is an interesting number.', Math.PI)");

 

    // expose a host object

    engine.AddHostObject("random", new Random());

    engine.Execute("Console.WriteLine(random.NextDouble())");

 

    // expose entire assemblies

    engine.AddHostObject("lib", new HostTypeCollection("mscorlib", "System.Core"));

    engine.Execute("Console.WriteLine(lib.System.DateTime.Now)");

 

    // create a host object from script

    engine.Execute(@"

        birthday = new lib.System.DateTime(2007, 5, 22);

        Console.WriteLine(birthday.ToLongDateString());

    ");

 

    // use a generic class from script

    engine.Execute(@"

        Dictionary = lib.System.Collections.Generic.Dictionary;

        dict = new Dictionary(lib.System.String, lib.System.Int32);

        dict.Add('foo', 123);

    ");

 

    // call a host method with an output parameter

    engine.AddHostObject("host", new HostFunctions());

    engine.Execute(@"

        intVar = host.newVar(lib.System.Int32);

        found = dict.TryGetValue('foo', intVar.out);

        Console.WriteLine('{0} {1}', found, intVar);

    ");

 

    // create and populate a host array

    engine.Execute(@"

        numbers = host.newArr(lib.System.Int32, 20);

        for (var i = 0; i < numbers.Length; i++) { numbers[i] = i; }

        Console.WriteLine(lib.System.String.Join(', ', numbers));

    ");

 

    // create a script delegate

    engine.Execute(@"

        Filter = lib.System.Func(lib.System.Int32, lib.System.Boolean);

        oddFilter = new Filter(function(value) {

            return (value & 1) ? true : false;

        });

    ");

 

    // use LINQ from script

    engine.Execute(@"

        oddNumbers = numbers.Where(oddFilter);

        Console.WriteLine(lib.System.String.Join(', ', oddNumbers));

    ");

 

    // use a dynamic host object

    engine.Execute(@"

        expando = new lib.System.Dynamic.ExpandoObject();

        expando.foo = 123;

        expando.bar = 'qux';

        delete expando.foo;

    ");

 

    // call a script function

    engine.Execute("function print(x) { Console.WriteLine(x); }");

    engine.Script.print(DateTime.Now.DayOfWeek);

 

    // examine a script object

    engine.Execute("person = { name: 'Fred', age: 5 }");

    Console.WriteLine(engine.Script.person.name);

 

    // read a JavaScript typed array

    engine.Execute("values = new Int32Array([1, 2, 3, 4, 5])");

    var values = (ITypedArray<int>)engine.Script.values;

    Console.WriteLine(string.Join(", ", values.ToArray()));

}
  

  

标签:engine,Execute,Console,lib,C#,System,引擎,WriteLine,v8
来源: https://www.cnblogs.com/BH-RJ-WK/p/15984253.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有