life's a struggle.
Intelligence without ambition is a bird without wings.
2016-05-12
阅读此文
2016-05-11
2016-05-08
定义
“一个走起来像鸭子,游起来像鸭子,叫起来也像鸭子,那么就可认为它是一只鸭子!”
要点
鸭子类型是一种动态类型风格
一个对象有效的语义(方法或属性),不是由继承自特定的类或实现特定的接口,而是由它本身所具有的方法和属性的集合来决定
在一个具体的上下文中(函数),只关心该对象是否具有相应的语义(方法或属性),而不关心其真实类型
属于一种多态,且不需要继承,灵活性更强!
若该对象在鸭子测试中(函数使用该对象的方法或属性),不能通过,则抛出异常(类型错误)
通过良好的文档,清晰的代码,完备的测试,来保证类型类型正常工作
实例
python
1 | class Duck: |
C++
1 |
|
参考
2016-05-08
2016-05-08
要点
lambda表达式
实质上,是一种快速定义函数对象的语法(编译器实现)1
auto cpp_bigger = [](int a, int b){ return a > b; };
<=>
1
2
3
4
5
6class _CompilerInventedName
{
public:
bool operator() (int a, int b) const { return a > b; }
};
_CompilerInventedName cpp_bigger;
2016-05-07
2016-05-07
好处
- 显式说明该方法是重写虚函数,提供编译器更强的的检查,防止因为sinature不同,重新定义函数,而不是重写!
列子
1 | class Parent { |
2016-05-07
2016-05-07
好处
- 相比
typedef
可读性更强
1 |
|
- 可以支持
template
1 |
|
参考
2016-05-06
作用
若不指定显示宽度,则默认为该类型的最大位数(int=>11)
作用相同于
printf
宽度控制,当数值位数小于指定值时,默认填充空格,大于指定值时,也不会截断!该显示宽度是可通过结果集(Result Set)中的元数据(Metadata)获取,具体采不采用取决于应用程序!
宽度和
zerofill
对数据存储(存储形式,占用空间)没有任何影响当列定义指定
zerofill
时,若该值小于指定宽度,select
查询输出会填充相应个数的0
测试
- 指定宽度和
zerofill
1 | create table t(num int(5) zerofill); |
- 不指定
zerofill
1 | MariaDB [test]> create table t1(num int(5)); |
- 不指定宽度,指定
zerofill
1 | MariaDB [test]> create table t2(num int zerofill); |
细节
对于int来说,取值范围-2^(32-1) to 0 to 2^(32-1)-1 = -2147483648 to 0 to 2147483647,最大显示宽度为11
对于unsigned int,0~4294967295,最大显示宽度为10
当指定
zerofill
时,mysql会自动追加unsigned
属性,!
1 | +-------+---------------------------+------+-----+---------+-------+ |
参考
- http://dev.mysql.com/doc/refman/5.7/en/numeric-type-attributes.html
- http://stackoverflow.com/questions/5634104/what-is-the-size-of-column-of-int11-in-mysql-in-bytes
- http://stackoverflow.com/questions/5256469/what-is-the-benefit-of-zerofill-in-mysql
- http://dev.mysql.com/doc/refman/5.7/en/integer-types.html