currying:
var add = function(a) {
return function(b) {
return a + b;
}
}
a(1)(2);
话说阿里云备案麻烦吗?最近辞职了,闲着没事想把之前写的东西放上去....
刷新可以运行,点击后不行很有可能是 turbolinks 带来的问题,不过我看代码是用 on 来委托事件,一般不存在这样的问题。tooltip 是自己写的触发事件么?
检查一下代码,前端内存泄露了
声明提升。跟变量声明一样。另外函数声明和变量声明这俩同时出现也会有化学反应的
function a() {}
var a;
function b() {}
var b = 1;
设置一下 pool 看看:
ActiveRecord::Base.establish_connection(
:adapter => 'mysql2',
:database => 'mandb', #oracle service name
:username => 'root',
:password => '',
:pool => 5
)
可以用 预排序遍历树算法 :)
自己实现的,有些地方不怎么样,轻喷
class Category < ActiveRecord::Base
include Concerns::RecursionTree
# 先序遍历, 拿到 [depth, name]
# 注意:由于 Rails 将不存在的列名过滤,此处只能使用 lft 来存储深度!!
scope :get_sorted_array, -> do
Category
.joins('AS node, categories AS parent')
.select('node.id, node.name, node.slug, node.model_id, (COUNT(parent.slug)) - 1 AS lft')
.where('node.lft BETWEEN parent.lft AND parent.rgt')
.group('node.parent_id, node.slug')
.order('node.lft')
end
end
#
# 预排序遍历树算法(modified preorder tree traversal algorithm)
# 来存储无限分级的树结构,以改进查询的时空复杂度。render 需要实现 get_sorted_array
#
module Concerns
module RecursionTree
extend ActiveSupport::Concern
included do
attr_accessor :children, :depth
end
# 同级插入
def place_with(id)
klass = self.class
if new_record?
klass.transaction do
brother = klass.select(:lft, :rgt, :parent_id).find(id)
raise AlertError.new('不能用虚拟的根节点作为兄弟节点') if brother.lft == 0
parent, right = brother.parent_id, brother.rgt
klass.where('rgt > ?', right).update_all('rgt = rgt + 2')
klass.where('lft > ?', right).update_all('lft = lft + 2')
self.parent_id = parent
self.lft = right + 1
self.rgt = right + 2
self.save!
end
end
end
# 节点追加
def append_to(id)
klass = self.class
if new_record?
klass.transaction do
left = klass.select(:lft).find(id).lft
klass.where('rgt > ?', left).update_all('rgt = rgt + 2')
klass.where('lft > ?', left).update_all('lft = lft + 2')
self.parent_id = id
self.lft = left + 1
self.rgt = left + 2
self.save!
end
end
end
# 删除节点
def remove
klass = self.class
klass.transaction do
left, right = self.lft, self.rgt
distance = (right - left - 1) / 2
klass.where('lft BETWEEN ? AND ?', left, right).delete_all
klass.where('rgt > ?', right).update_all(['rgt = rgt - ?', distance])
klass.where('lft > ?', right).update_all(['lft = lft - ?', distance])
end
end
module ClassMethods
# 采用迭代和栈替代递归,避免递归带来的内存问题
def render
@nodes = get_sorted_array
root = @nodes.shift # 出队无意义的根节点
current_depth = -1
item_path = [root]
@nodes.each do |item|
depth = item.depth = item.lft # 留意 get_sorted_array 方法的注释
if depth > current_depth
(item_path[-1].children ||= []) << item
item_path << item
elsif depth == current_depth
item_path[-1] = item
item_path[-2].children << item
else
until item_path.pop.lft == depth; end
item_path[-1].children << item
item_path << item
end
current_depth = depth
end
root
end
end
end
end
没用过 ember,不过找到这个:https://github.com/ebryn/ember-model
在 https://github.com/rails/rails/blob/master/railties/lib/rails/commands/commands_tasks.rb#L5 这里提到某些命令需要参数前置,而 https://github.com/rails/rails/blob/master/railties/lib/rails/commands/commands_tasks.rb#L62 明确表示 console 命令需要在运行之前加载 config/application,参数必需要写在前面。
也就是说运行 rails c 时,首先启动的就是 rails app,而 rails app 需要 RAILS_ENV,所以只能前置。
而后置的是 rake 的写法,运行顺序应该是 rake -> rails app,也就是说 RAILS_ENV 这个变量其实是传递给 rake 再转交到 rails 的。
以上仅供参考,不知道对不对。
理解错误,看4楼
#3 楼 @u1378130755 JS 在 window 下用 var
声明的变量会赋到 window 对象上,所以 那题 var a = 1
的声明被提前,"a" in window
永远为 true。
并不是 this 永远指向 true。但是你必须清楚 JS 的 this 很没节操,谁来调的函数就是谁。
fn1 = object.getNameFunc(); // getNameFunc 由 object 调用,所以 this 指向 object;
fn1(); // 等价 fn.call(this); 此时 this 指向 window
在浏览器 global context 中 var name = "The Window";
与 this.name = "The Window"
等价。
if (!("a" in window)) {
var a = 1;
}
alert(a);
你看看这题,alert 弹出的是啥?
而 nodejs 虽然有一个跟 window 类似的 global,但是每个文件(模块)都有自己的执行上下文,所以 var name = "The Window"
在 nodejs 中是以局部变量存在。
内容还没看,吐嘈一下排版可以吗
拿不到是肯定的.. FILE=Settings.fles
才在第二步,这时候 Rails 核心还没启动完成,ENV 都没加载。你的代码肯定也还没加载进来。
#9 楼 @u1378130755 radix: 可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。 如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以“0x”或“0X”开头,将以 16 为基数。 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
你在 console 里面试试 parseInt('1', 1)
看看
翻译起来就是这样:
["1", "2", "3"].map(function(i, indx, array) {
parseInt(i, indx); // indx 当作 radix 传进 parseInt 了
});
parseInt 的 radix 可以参考这里: http://www.w3school.com.cn/js/jsref_parseInt.asp
https://github.com/mojombo/chronic/blob/master/lib/chronic/parser.rb#L12 默认用了 十二小时制 =, = 这样就可以了
Chronic.parse('3:00', hours24: true)
或者把 3:00
换成 3:00 am
chronic 的问题。whenever 用了 chronic 解析: https://github.com/javan/whenever/blob/master/lib/whenever/cron.rb#L15
我在命令行试了一下,一样的问题:
irb(main):001:0> require 'chronic'
=> true
irb(main):002:0> Chronic.parse('3:00')
=> 2014-02-10 15:00:00 +0800
irb(main):003:0>