link_to
还可以直接用对象参数,更加有 "model driven" 的感觉
但在 slim 里用 a
就比 link_to
容易写,也更快...
a href=xxx_path data-method='delete'
其实一般这么用就可以了...
module X
module_function
def hello; 'hello'; end
def world; 'world'; end
end
method capture 绑定了实例变量的环境,method 对象可以看作某种形式上的 closure
method 也可以用 lambda 定义
x = 0
@x = 0
define_singleton_method(:f) { x += 1; @x += 1 }
f
x #=> 1
@x #=> 1
这里的 method(:f)
在 局部变量/实例变量 两种环境上都是 closure 了
忘了怎么整的了,能猫人拷一个 launcher 什么的即可
include?
是通过循环遍历元素实现的
cover?
是用比较上下限的方式实现的
1.8 中 include?
应该就和 1.9 的 cover?
一样
字符串比较是字典序,例如 "apple" 就是在 "a" 在 "b" 之间
这个词是和客户交流用的,不是和码农交流用的...
pg 用 hstore 存个 hash, 就可以无限套下去了..
ruby 解析 ||=
的代码 (和 *=, /=, +=, ...
类似) 在 parse.y 中 (大约 7000 多行后...):
case '|':
if ((c = nextc()) == '|') {
lex_state = EXPR_BEG;
if ((c = nextc()) == '=') {
set_yylval_id(tOROP);
lex_state = EXPR_BEG;
return tOP_ASGN;
}
在源代码扫到 |
的时候看看下个是否是 |
, 如果是,再看下下个是否是 =
, 如果是,就生成一个词法元素 tOP_ASGN
如果要支持 || =
中间有任意多空格,就要把它改成语法元素,大概会像是这样子:
op_asng : tOP '='
{ ... }
有兴趣和时间的同鞋可以向 ruby 提交一个 patch...
dojo 是道场么?
不用一个个字节的搞,unpack
就可以了
str.unpack 'H*'
哪里看到的这个方法?求链接...
...
def f a, n
a.take_while {|i| n -= i if n > i } << n
end
难道是 update 方法捕获了不同类型的异常然后变成同一种类型,然后你又要抓它抛出的异常转回不同的类型么...
#42 楼 @sunfmin 还没弄好... 应该可以比 light table 先做出来...
process 是并行/并发工具。
thread 也是并行/并行工具,但是有解释器锁的存在,在 ruby 里并行效果不好。
fiber 不是并行工具,因为其实还是只用一个核,但也由于只用一个核,没有线程同步的问题,不需要完全拷贝栈,因此可以快速大量创建,是并发工具。
CUDA, OpenCL 是利用 GPU 的并行工具,非并发工具。由于一些 GPU 有上千个核,并行处理能力比一般 CPU 强很多很多。GPU 运算有相应的 API (CUDA) 和封装 (OpenCL), 不受解释器锁的影响。
用 @flyerhzm 的 rails_best_practices 扫一扫?
a = [1, 3, 5, 7]
sum = 0
b = a.map {|e| sum += e }
问题很多啊... 搞不好会造成一门语言的没落...
补充了一点字符串和 Ruby 2.0 相关的内容...
开发用什么都可以啊
如果想运行多线程模式,容器就不能用 unicorn, 用 puma 或者 thin 都可以
数理逻辑最重要,先修正我们被中小学时代某些奇怪的课教授的神奇逻辑思维...
大概是看罗素写的数学原理 (Principia Mathematica) 看到自然数 "1" 和加法的定义的程度,就应该够了... 数学学多了就会整天和学软件工程的掐架, 不利财...
http://www.okcupid.com/tests/the-difficult-math-test 85 分飘过...