麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發(fā) > Python > 正文

IronPython分析Lambda表達(dá)式

2024-07-21 02:30:20
字體:
供稿:網(wǎng)友

在我們的.net項(xiàng)目中,要使用到自定義公式功能,我們利用了ironpython的lambda功能,可以方便的計(jì)算值,但是我們發(fā)現(xiàn),如果表達(dá)式涉及的屬性發(fā)生改變時(shí),公式必須重新計(jì)算,怎樣析表達(dá)式知道到底訪問了哪些屬性呢?

在我們的.net項(xiàng)目中,要使用到自定義公式功能,我們利用了ironpython的lambda功能,可以方便的計(jì)算值,但是我們發(fā)現(xiàn),如果表達(dá)式涉及的屬性發(fā)生改變時(shí),公式必須重新計(jì)算,怎樣析表達(dá)式知道到底訪問了哪些屬性呢?

仔細(xì)研究發(fā)現(xiàn)ironpython提供了這樣的功能:

以下為引用的內(nèi)容:

systemstate state = new systemstate();
   compilercontext context = new compilercontext();
  
   parser p = parser.fromstring(state, context, "activeobject.contact.address + 'ds'");
   ironpython.compiler.ast.expression ex = p.parsetestlistasexpression();

上面的代碼分析了表達(dá)式:activeobject.contact.address + 'ds', 這里用了parser類可以分析出表達(dá)式,使用vs對象查看器,可以理解結(jié)果:

問題還沒有完全解決,我想結(jié)果有了,我總不能自己遞歸所有結(jié)構(gòu)吧?哇,怎么也有20多種類型,在看看,嗯,還有這個(gè):

以下為引用的內(nèi)容:

  class program {
   static void main(string[] args) {
   systemstate state = new systemstate();
   compilercontext context = new compilercontext();
  
   parser p = parser.fromstring(state, context, "activeobject.contact.address + 'ds'");
   ironpython.compiler.ast.expression ex = p.parsetestlistasexpression();
  
   mywalker w = new mywalker();
   ex.walk(w);
   }
   }
  
   class mywalker : astwalker {
   public override bool walk(fieldexpression node) {
   console.writeline("walk:{0},{1}", node.name, node.target);
   return base.walk(node);
   }
   }

cool!!我重載的虛方法被調(diào)用了兩次,告訴我有2次字段的訪問。

在.net 3.5中提供了lambda的結(jié)構(gòu)描述類,但我是沒有找到動(dòng)態(tài)編譯分析的類。看博客園的朋友說:本來有個(gè)dynamicexpression的類提供了動(dòng)態(tài)編譯功能,但是現(xiàn)在的.net 3.5砍掉了,但是在linq 101 samples中卻有源代碼,靠。

注意:本程序使用ironpython 的1.0版本,2.0版本的方法已經(jīng)不同。 下面是2.0的代碼:

以下為引用的內(nèi)容:

class program {
   static void main(string[] args) {
   //引擎
   ironpython.hosting.pythonengine engine = ironpython.hosting.pythonengine.currentengine;
   //代碼單元
   sourcecodeunit unit = new sourcecodeunit(engine, "activeobject.contact.address + 'ds'");
   //上下文和選項(xiàng)
   compilercontext context = new compilercontext(unit);
   ironpython.pythonengineoptions option = new ironpython.pythonengineoptions();
  
   //分析表達(dá)式
   parser p = parser.createparser(context,option);
   ironpython.compiler.ast.expression ex = p.parseexpression();
  
   //遞歸查找
   mywalker w = new mywalker();
   ex.walk(w);
   }
   }
   class mywalker : pythonwalker {
   public override bool walk(memberexpression node) {
   console.writeline("walk:{0},{1}", node.name, node.target);
   return base.walk(node);
   }
   }


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美日韩一区二区综合 | 欧美一级黄视频 | 女人解衣喂奶电影 | 7777在线视频免费播放 | 一区二区视频在线看 | 欧美交在线 | 在线观看福利网站 | 91av国产在线| 伊人亚洲精品 | 日韩视频在线一区二区三区 | 九九热在线精品视频 | www日韩在线观看 | 啊~用cao嗯力cao烂我视频 | 亚洲精品xxx | 一级黄色免费观看视频 | 精品国产视频一区二区三区 | 一边吃奶一边摸下娇喘 | 日韩视频www | 国产在线精品一区二区不卡 | 色网免费观看 | 国产精品一区二区三区在线看 | 一级片免费在线 | 久久免费视频7 | 国产成年人视频 | 亚洲国产精品一区二区三区 | 青草视频在线观看视频 | 欧美一级一区二区三区 | 夜夜夜影院 | 九九热视频在线免费观看 | 五月激情久久 | 本色视频aaaaaa一级网站 | 鲁丝一区二区二区四区 | h视频免费在线观看 | 国产精品av久久久久久无 | 国产1区2区在线 | 国产一级毛片在线看 | 国产喷白浆10p | 久久精品欧美一区二区三区不卡 | 中文字幕在线永久 | 国产正在播放 | 久久国产精品久久久久 |