object

changed object after storage or object-state used

主宰稳场 提交于 2020-01-25 06:54:08
问题 Example: class UserStorage { public function addUser(User $user) { //saves to db } } class User { public function setName($name); } What if I add a user to the user storage and later change that user object? In this case you might argue that user objects only should be stored on __destruct. But sometimes this isn't an option (eg imagine the user is displayed and updated afterwards). 回答1: I agree with Peter, the above model seems a little quirky to me and I would recommend against implicit

Java并发--线程间协作的两种方式:wait、notify、notifyAll和Condition

半世苍凉 提交于 2020-01-25 06:42:00
  在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作。比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权。因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去。因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态。然后等待消费者消费了商品,然后消费者通知生产者队列有空间了。同样地,当队列空时,消费者也必须等待,等待生产者通知它队列中有商品了。这种互相通信的过程就是线程间的协作。   今天我们就来探讨一下Java中线程协作的最常见的两种方式:利用Object.wait()、Object.notify()和使用Condition   以下是本文目录大纲:    一.wait()、notify()和notifyAll()   二.Condition    三.生产者-消费者模型的实现   转载原文链接:http://www.cnblogs.com/dolphin0520/p/3920385.html 一.wait()、notify()和notifyAll()   wait()、notify()和notifyAll()是 Object类中的方法: /** * Wakes

object的wait()、notify()、notifyAll()、方法和Condition的await()、signal()方法

泄露秘密 提交于 2020-01-25 06:38:08
wait()、notify()和notifyAll()是 Object类 中的方法 从这三个方法的文字描述可以知道以下几点信息: 1)wait()、notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写。 2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor(即锁) 3)调用某个对象的notify()方法能够唤醒一个正在等待这个对象的monitor的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程; 4)调用notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程; 有朋友可能会有疑问:为何这三个不是Thread类声明中的方法,而是Object类中声明的方法 (当然由于Thread类继承了Object类,所以Thread也可以调用者三个方法)?其实这个问 题很简单,由于每个对象都拥有monitor(即锁),所以让当前线程等待某个对象的锁,当然 应该通过这个对象来操作了。而不是用当前线程来操作,因为当前线程可能会等待多个线程 的锁,如果通过线程来操作,就非常复杂了。 上面已经提到,如果调用某个对象的wait()方法,当前线程必须拥有这个对象的monitor(即 锁),因此调用wait()方法必须在同步块或者同步方法中进行(synchronized块或者

[译]JavaScript:typeof的用途

╄→尐↘猪︶ㄣ 提交于 2020-01-25 05:26:43
/*--> */ /*--> */ 原文: http://www.2ality.com/2012/01/typeof-use-cases.html JavaScript中的 typeof其实非常复杂,它可以用来做很多事情 ,但同时也有很多怪异的表现.本文列举出了它的多个用法,而且还指出了存在的问题以及解决办法. 阅读本文的前提是,你现在应该已经知道原始值和对象值的区别了. 1.检查一个变量是否存在,是否有值. typeof在两种情况下会返回 "undefined" :一个变量没有被声明的时候,和一个变量的值是 undefined的时候 .例如: > typeof undeclaredVariable === "undefined" true > var declaredVariable; > typeof declaredVariable 'undefined' > typeof undefined 'undefined' 还有其他办法检测某个值是否是 undefined : > var value = undefined; > value === undefined true 但这种方法如果使用在一个未声明的变量上的时候,就会抛出异常,因为只有 typeof才可以正常检测未声明的变量的同时还不报错 : > undeclaredVariable === undefined

es6 学习笔记 (map)

半城伤御伤魂 提交于 2020-01-25 04:52:00
JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。 为了解决这个问题,ES6 提供了 Map 数据结构。它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。 var data1 = { a : 1 }; var data2 = { b : 2 }; var obj = {}; obj[data1] = 2; obj[data2] = 3; console.log(obj); // Object {[object Object]: 3} 上述代码中,obj 只有一个属性 [object Object],因为在向 obj 中添加属性时,遇到两个对象,而对象的键值只能是字符串,因此调用 toString 方法转换为字符串,两个对象都转换为 [object Object],所以添加属性的时候,后面的属性值将覆盖前面的值 console.log(data1.toString()); // [object Object] console.log(data2

ES6 之 Reflect 的方法总结

时光怂恿深爱的人放手 提交于 2020-01-25 04:39:33
1. 概述 将 Object 对象的一些明显属于语言内部的方法(比如 Object.defineProperty ),放到 Reflect 对象上。 修改某些 Object 方法的返回结果,让其变得更合理。比如, Object.defineProperty(obj, name, desc) 在无法定义属性时,会抛出一个错误,而 Reflect.defineProperty(obj, name, desc) 则会返回 false 。 让 Object 操作都变成函数行为。某些 Object 操作是命令式,比如 name in obj 和 delete obj[name] ,而 Reflect.has(obj, name) 和 Reflect.deleteProperty(obj, name) 让它们变成了函数行为。 Reflect 对象的方法与 Proxy 对象的方法一一对应,只要是 Proxy 对象的方法,就能在 Reflect 对象上找到对应的方法。 // 老写法 Function.prototype.apply.call(Math.floor, undefined, [8.75]) // 8 // 新写法 Reflect.apply(Math.floor, undefined, [20.5]) // 20 2. 静态方法 Reflect 对象一共哟13个静态方法:

Proxy-代理器(预计vue3.0实现双向绑定的方式)

雨燕双飞 提交于 2020-01-25 04:38:19
todo 常见的基于数据劫持的双向绑定有两种实现,一个是目前Vue在用的 Object.defineProperty ,另一个是ES2015中新增的 Proxy ,而Vue的作者宣称将在Vue3.0版本后加入 Proxy 从而代替Object.defineProperty,本文详细解析了es6中的Proxy方法,严格来讲Proxy应该被称为『代理』而非『劫持』。 Proxy Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“ 元编程 ”(meta programming),即对编程语言进行编程。 Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以 对外界的访问进行过滤和改写 。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。 var obj = new Proxy({}, { get: function (target, key, receiver) { console.log(`getting ${key}!`); return Reflect.get(target, key, receiver); }, set: function (target, key, value, receiver) { console.log(`setting

JavaScript 深入理解proxy

丶灬走出姿态 提交于 2020-01-25 03:58:19
语法:let p = new Proxy(target, handler); 参数: target:用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。 handler:一个对象,其属性是当执行一个操作时定义代理的行为的函数。 作用:使用p对象来代理target对象 1.访问p代理对象时(读/写/new等),实际是通过handle对象中的函数操作target对象。 2.p.prototype等于target.prototype,即通过p代理对象,可以访问到target的原型。 举例: 1. 扩展构造函数的源码 function extend(sup, base) { //sup和base都是构造函数的引用,都有prototype属性,prototype中的constructor指向构造函数本身。 // 获取base.prototype对象的constructor属性的描述符对象:{value: ƒ, writable: true, enumerable: false, configurable: true} var descriptor = Object.getOwnPropertyDescriptor( base.prototype,"constructor" ); //Object.create(proto,

iphone NSHTTPCookieStorage avaible on app reopen?

南笙酒味 提交于 2020-01-25 03:20:07
问题 I am working on my app here- and it pretty much comes to this. I have a login box where a users log's in and then it saves the cookie data on return like so: NSArray * all = [NSHTTPCookie cookiesWithResponseHeaderFields:[resp allHeaderFields] forURL:[NSURL URLWithString:@"http://myurl]]; NSHTTPCookieStorage *sharedHTTPCookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; [sharedHTTPCookieStorage setCookies:all forURL:[NSURL URLWithString:@"http://myurl"] mainDocumentURL:nil]; After

python语法拾遗-OOP与错误调试

依然范特西╮ 提交于 2020-01-25 02:58:06
title: python语法拾遗(一) date: 2019-11-12 12:23:49 categories: Python Python语法相关 tags: python 语法使用 OOP description: python面对对象编程(类,继承,多态),错误调试 python面对对象编程(类,继承,多态,鸭子类型) 概念 类(class)与实例(instance) 类是抽象的模板,实例是根据类创建的具体“对象”。实例之间拥有相同的方法,但各自数据可能不同。 __init__ 方法,给模板类添加必要的属性。其中,在变量名前添加‘__’双下划线,可以将其变为私有变量,即外部不能随意访问修改。 在类中定义方法,可以保护内部数据,将方法的具体细节隐藏在类内部。 class Studnet ( object ) : def __init__ ( self , name , score ) : self . __name = name self . __score = score def get_gender ( self ) : return self . __name def set_score ( self,score ) : if 0 <= score <= 100 : self . __score = score else : raise ValueError (