eval

两周自制脚本语言-第9天 设计面向对象语言

半城伤御伤魂 提交于 2020-01-22 00:30:59
第9天 设计面向对象语言 目标:为Stone语言添加类和对象的支持。仅支持单一继承 9.1 设计用于操作类与对象的语法 添加的类与对象的处理功能后,下面的Stone语言就能被正确执行了 class Position { x = y = 0 def move(nx,ny) { x = nx; y = ny } } p = Position.new p.move(3, 4) p.x = 10 print p.x p.y 首先定义一个Position类,方法由def语句定义。类中字段通过变量表示,并赋了初始值。上面的例子定义了move方法以及字段x与y。 类名后接.new组成的代码表示创建一个对象。为简化实现,这里规定Stone语言无法定义带参数的构造函数。 如果希望继承其他的类,只需在类名之后接着写上extends即可。例如,下面的代码能够定义一个及程序Position类的子类Pos3D class Pos3D extends Position { z = 0 def set(nx,ny,nz) { x = nx;y = ny;z = nz } } p = Pos3D.new p.move(3,4) print p.x p.set(5,6,7) print p.z Stone不支持方法重载。在同一个类中无法定义参数个数或类型不同的同名方法 9.2 实现类所需的语法规则 代码清单9

JavaScript严格模式

我们两清 提交于 2020-01-21 23:51:33
JavaScript严格模式的使用是规范js代码的一种行为,它对代码提出了更高的要求,会对代码进行错误检查,使js代码更加具有健壮性、安全性。 我们平时使用的是一般模式。要进入严格模式,可以在js文件开头写上 'use strict'; 或者在函数开头写上这一句,从而使得函数内部进入严格模式。从这里我们可以看出,函数内部具有自己的作用域。 说起作用域,js的作用域可以分为全局作用域、函数作用域和eval的独立作用域,虽然ES5没有块级作用域的说法,但是块级作用域在ES6用let实现了。 严格模式是向上兼容的。 这里介绍几个严格模式下的要求: 1.不允许使用with。原因是with写出来的代码可读性差,不推荐使用。(with里的代码块可以直接使用传入的对象的属性) 2.不允许未被声明的变量被赋值。这点是为了防止变量在不经意间自动提升为全局变量。如 var a = b = 1 这句代码中b就被自动提升为全局变量。 3.arguments变为参数的静态副本。 如下面的示例,一般模式输出100,严格模式输出1。 'use strict' function f(a){ arguments[0] = 100 return a } document.write(f(1)) 4.使用运算符delete删除一些不可以删除的东西(如参数、函数名、不可配置的属性等)报错。

Odoo权限机制

…衆ロ難τιáo~ 提交于 2020-01-21 13:50:08
权限管理的四个层次 一、菜单级别:不属于指定菜单所包含组的用户看不到该菜单,只隐藏菜单,若知道菜单ID,任然可以通过指定URL访问 二、对象级别:对某个对象是否有“创建,读取,修改,删除”的权限,可以简单理解为表对象 三、记录级别:对对象表中的数据的访问权限,比如“客户”对象,业务员只能对自己所创建的客户有访问权限,而经理可以访问其管辖的所有业务员的“客户”对象 四、字段级别:一个对象或表上的某些字段的访问权限,比如产品的成本字段只有经理有读写权限 1 name = fields.Char('Name', size=128, required=True, select=True, read=['base.group_admin'], write=['base.group_admin']) 定义name字段只有超级用户组可读写 建立权限组 就是我们常说的用户组,通常存放在 "reurity/模块名_security.xml" 文件下 例如: 1 <!-- 新建用户组manager --> 2 3 <record id="manager" model="res.groups"> 4 <field name="category_id" ref="module_category_hidden"/> 5 <field name="name">Manager</field> 6 <field

Convert string to class name without using eval in ruby?

孤人 提交于 2020-01-21 03:02:30
问题 I have something like this: string = "Post" I would like to convert the string to a class name literal. I use eval like this to convert the string: eval(string) #=> Post Being a javaScript developer I try to avoid eval. Is there a better way of doing this in Ruby? Or is using eval the preferred way of handling this? 回答1: You can try class Post end Object.const_get("Post") Which returns the Post class 回答2: Use Module.const_get string = "Fixnum" clazz = Object.const_get(string) clazz.name # =>

两周自制脚本语言-第8天 关联Java语言

六月ゝ 毕业季﹏ 提交于 2020-01-20 19:21:57
第8天 关联Java语言 本章要达到的目的:扩展Stone语言,使它能在程序中调用Java语言中的static方法 8.1 原生函数 Java语言提供了名为原生方法的功能,用于调用C语言等其他一些语言写成的函数。我们将为Stone语言添加类似的功能,让它能够调用由Java语言写成的函数。 原生函数将由Arguments类的eval方法调用。 代码清单8.1是用于改写Arguments类的eval方法的修改器。 这个名为NativeArgEx的修改器标有extendsArgumentsEx一句,它修改的是Arguments类。 ArgumentsEx是第7天代码清单7.7中定义的另一个修改器。NativeArgEx修改器与ArgumentsEx修改器都有用于修改Arguments类,它将在后者的基础上对该类作进一步修改。 这里的修改器继承了另一个修改器。 通过这次修改,Arguments类eval方法将首先判断参数value是否为NativeFunction对象。参数value是一个由函数调用表达式的函数名得到的对象。eval方法之前返回的总是Function对象。如果参数是一个NativeFunction对象,eval方法将在计算实参序列并保存至数组args之后,调用NativeFunction对象的invoke来执行目标函数。如果参数不是NativeFunction对象

ImplementIon of eval() in Java [duplicate]

一世执手 提交于 2020-01-20 10:09:06
问题 This question already has answers here : Is there an eval() function in Java? (12 answers) Closed 6 years ago . My question has to do with the phenomenon of non existence of function eval() in Java. After a bit of reading on the Internet I found out that the best thing I could do is to create my own parser as a Java function. But how to do that? What I need actually is a function that reads the first column of the above array and returns one after another all these values. Note however that

js中转换json对象方法详解及使用案例

妖精的绣舞 提交于 2020-01-20 07:07:15
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。因为采用独立于语言的文本格式,也使用了类似于C语言家族的习惯,拥有了这些特性使使JSON称为理想的数据交换语言,作用是易于阅读和编写,同时也易于机器解析和生成(一般用于网络传输速率)。 (1)JSON.parse函数 作用:将json字符串转换成json对象。 语法:JSON. parse(text[,reviver]). 参数:text 必须;一个有效的json字符串。 reviver 可选。 返回值:一个对象或数组。 example: (2)JSON.stringify()函数 作用:将json对象转换成json字符串。 语法:JSON.stringify(value [, replacer] [, space]) 参数:value 必须;通常为对象或数组。 replacer 可选,用于转换结果的函数或者数组。 space 可选。向返回值 JSON 文本添加缩进、空格和换行符以使其更易于读取。 返回值:一个包含JSON文本的字符串。 example: (3) eval()函数 作用:eval()函数可计算某个字符串,并执行其中的javascript表达式或要执行的语句。 语法:eval(string) 参数: string 必须,需要计算的字符串

两周自制脚本语言-第7天 添加函数功能

[亡魂溺海] 提交于 2020-01-19 23:30:39
第7天 添加函数功能 基本的函数定义与调用执行、引入闭包使Stone语言可以将变量赋值为函数,或将函数作为参数传递给其他函数 有些函数将有返回值的归为函数,没有返回值的归为子程序 7.1 扩充语法规则 函数定义语句的语法规则 此书将函数定义语句称为def语句。def语句仅能用于最外层代码,用户无法在代码块中定义函数 Stone语言将最后执行语句(表达式)的计算结果将作为函数的返回值返回 代码清单 7.1 与函数相关的语法规则 param : IDENTIFIER params : param { "," param } param_list : "(" [ params ] ")" def : "def" IDENTIFIER param_list block args : expr { "," expr } postfix : "(" [ args ] ")" primary : ( "(" expr ")" | NUMBER | IDENTIFIER | STRING ) { postfix } simple : expr [ args ] program : [ def | statement ] (";" | EOL) 形参param是一种标识符(变量名)。形参序列params至少包含一个param,各个参数之间通过逗号分隔。 param

Python执行JS -- PyExecJS库

六月ゝ 毕业季﹏ 提交于 2020-01-19 14:06:54
pip install PyExecJS 查看执行JS的环境 print(execjs.get().name) 返回值:JScript windows 默认执行JS的环境 返回值:Node.js (V8) 自己安装的NodeJS环境 安装NodeJS 下载: http://nodejs.cn/download/ 安装: https://www.runoob.com/nodejs/nodejs-install-setup.html 如果下载的是zip文件,将解压出来的路径添加到环境变量中即可 查看是否安装成功 node --version 执行JS execjs.eval execjs.compile、call import execjs # 直接执行 print('execjs.eval:', execjs.eval(' "a、b、c、d、e".split("、") ')) # 先编译、后调用 # 将js文件中的内容读取出来编译即可调用里面的方法了 js_compile = execjs.compile( """ function add(x, y) { return x + y; } """ ) eval_str = "js_compile.call('add', '{}', '{}')".format('abc', 123) print('eval执行的语句:', eval