已经打电话冻结换卡
我想问信用卡还有分期欠款可以换卡吗?
在 gzruby 官网见到你们的友情链接了:)
楼主有没参加过 gzruby 的聚会?
绝赞啊!!!
前端 mvc 比 rails pjax 好
Great! See u next Wednesday!
先把订阅数据移到 feedly 了,不明 google 的意途
小更新一下,学徒的名额已招满
#16 楼 @xfstart07 朋友你好,我们公司全体这两天都在户外活动,可能同事未有时间回邮件
你的信息我们已收到,会尽快给你一个答复
和楼主一样,qq 企业邮发不出去,gmail 则无问题,坑爹啊这是
rabl or jbuilder 之类的 json 模板可以解决问题
查询性能问题可以通过缓存解决
#13 楼 @xfstart07 可以,发邮件来跟我们 leader 聊聊嘛!
#10 楼 @chankaward 有兴趣的同学请发邮件,多多交流:)
另公司还有只 93 的漂亮妹:D
不用 gem 就用不到很多 customize 的东西
奇怪怎么 markdown 的标题出不来?是屏蔽了吗?
现在暂时的解决方法
#90 楼 @yedingding 本来 cherry 的键盘比较大,置在 mac 上很别扭...并且没有白色那手托的话长期用也是不舒服
#92 楼 @HungYuHei 没数字键没关系的
刚才本来打算拍萌购的 HHKB pro2,一看他们留言板最近 N 多单都有问题,然后问了家淘宝价钱比较合理的(比萌购贵 200 多)就没有无刻的,唉
不论我把桌面收拾得多好,macbook 放桌上就没法子把机械键盘放上桌,经常要切手换去 trackpad 都很麻烦,不能轻松从键盘转移到鼠标的话长期来说很难用,看来 HHKB 才是解决之道
P.S 以后买桌子一定要大
即使是默认的 data-confirm 标记的行为,也可以通过重写 js 方法去实现自己的样式,实现自己的 ajax 行为更不在话下
jcrop
本来静态语言当宝的各种设计模式要解决的问题,在动态语言的鸭子和匿名闭包等特性下都不是问题…
dash 是我第一个花钱买的 mac 软件
翻了下,正则的地方不太清晰望能指正下
##1 Refinements 在 module 命名空间里面使用这东西,那么之下定义的方法只有在命名空间内才有效,在命名空间之外会失败
module NumberQuery
refine String do #关键字refine
def number?
match(/^[1-9][0-9]+$/) ? true : false
end
end
end
begin
"123".number?
rescue => e
p e #=> #<NoMethodError: undefined method `number?' for "123":String>
end
在 module 命名空间内则随便用,好处是不会污染到外面已存在的对象
module NumberQuery
p "123".number? #=> true
end
想在其他已存在的 module 命名空间里面用到的话,可以用 using 关键字
module MyApp
using NumberQuery#个人觉得 using这名取得一般...
p "123".number? #=> true
p "foo".number? #=> false
end
##2)Keyword Arguments
def wrap(string, before: "<", after: ">")
"#{before}#{string}#{after}" # no need to retrieve options from a hash
end
# optional
p wrap("foo") #=> "<foo>"
# one or the other,可以只设其中一个值
p wrap("foo", before: "#<") #=> "#<foo>"
p wrap("foo", after: "]") #=> "<foo]"
# order not important, 顺序可以随便放
p wrap("foo", after: "]", before: "[") #=> "[foo]"
# double splat to capture all keyword arguments, or use as hash as keyword, 两个星号表示可以把整个keyword arguments抓下来
# arguments
def capture(**opts)
opts
end
p capture(foo: "bar") #=> {:foo=>"bar"} 返回的是hash
# keys must be symbols 传进的key一定要是hash
opts = {:before => "(", :after => ")"}
p wrap("foo", **opts) #=> "(foo)" 注意这里的**opts, 代表把上面的opts当做keyword arguments
#旧的hash传参数方法继续支持,其实用起来不会有太大的不同
p wrap("foo", :before => "{", :after => "}") #=> "{foo}"
##3)Enumerator lazy 可以遍历无限大集合的新方式
require "timeout"
begin
timeout(1) {[1,2,3].cycle.map {|x| x * 10}} #cycle()函数里面不指定次数的话就是无限次完全遍历当前集合,指定次数就是遍历多少次
rescue => e
p e #=> #<Timeout::Error: execution expired>
end
p [1,2,3].lazy.cycle.map {|x| x * 10}.take(5).to_a #=> [10, 20, 30, 10, 20] 本应不断循环,但是用了lazy后会一次扒出来
#A lazy enumerable will evaluate the entire chain for each element at a time, rather than all elements at each stage of the chain, so the following will output at 1 second intervals. Without #lazy all output would come after 3 seconds
##4)Enumerator prepend
module A
def foo
"A"
end
end
class B
include A
def foo
"B"
end
end
p B.new.foo #=> "B"
以前在 class 里面写的同名方法会覆盖掉 module 里面的方法,可以用回 super 去调用复写了的 module 方法 现在用 prepend 的话
class C
prepend A
def foo
"B"
end
end
p C.new.foo #=> "A" 这种情况还是可以用super访问到class里面定义的foo方法,ruby就是要提供更多选择给我们...
##5) 新的 to_hash 方法 to_h
p({:foo => 1}.to_h) #=> {:foo=>1}
Baz = Struct.new(:foo)
baz = Baz.new(1)
p baz.to_h #=> {:foo=>1}
所以以前的写法
def foo(opts)
raise ArgumentError, "opts must be a Hash" unless opts.is_a?(Hash)
# do stuff with opts
end
可以变成这样:
def foo(options)
if options.respond_to?(:to_h)
opts = options.to_h
else
raise TypeError, "can't convert #{options.inspect} into Hash"
end
# do stuff with opts
end
##6)symbol array 的方便写法%i()
p %i{hurray huzzah whoop} #=> [:hurray, :huzzah, :whoop]
##7) 正则表达式的引擎转成 Onigmo (?(cond)yes|no) #有点像三目运算符,如果 cond 先 match 的话,就再去 match yes,否则就去 match no
例子
regexp = /^([A-Z])?[a-z]+(?(1)[A-Z]|[a-z])$/
#开头大小写字母都可以,中间要都是小写字母, 然后引用回括号1,前面的大写match到吗?match到再看看是否A-Z结尾,否则是a-z结尾
#这例子只会检测到前后都是大写或都是小写 并且中间要是小写 的例子
regexp =~ "foo" #=> 0
regexp =~ "foO" #=> nil
regexp =~ "FoO" #=> 0
现在转用差不多的 agnoster,原来显示的东西太长了,改一下 theme 下面的 prompt 就可以有自己想要的效果