目前项目团队不支持 remote,因为常需要使用公司的内网络环境以及需要面对面沟通。。(但是平时工作不加班个人时间充裕,偶尔有私事的话也可以在家办公
从 Senior 到 Principle 都考虑,欢迎投简历!!
还需要招几个人,从 junior,senior 到 principle 都可以,大家请尽快发简历哦 :)
#5 楼 @darkbaby123 "You Don't Know JS" +1 还有还有,Ruby 和 JS 的内部原理都差不多,都源自 smalltalk+scheme_lisp, 强烈推荐
如果是求 >=4 的 10 个随机数,就比较简单:
def samples_for_sum(sum, k) # generate k rand values greater than 1, whose sum is 'sum'
seq = [0] + (1...sum).to_a.sample(k-1).sort + [sum]
seq.each_cons(2).map{|pre, cur| cur-pre}
end
def sum_samples_at_least(min, sum, k)
cut = min-1
samples_for_sum(sum-k*cut, k)
.map{|i| i+cut}
end
all = sum_samples_at_least(4,80,10)
p all, all.inject(:+)
是的,上面说的都很清楚了。
x = Object.new
x.do_it #=> 就会去x的类里(也就是Object里)找do_it方法
Object.do_it #=>就会去Object的类里,也就是 Class里找do_it,因为找不到就会去Class的超类也就是Object里找do_it
既然知道类,为什么不直接用实例或者直接定义成类方法呢?klass.new.foo
class C
def bar; 'instance bar' end
def baz; 'instance baz' end
end
class C
def self.become_evil(*names)
obj = new
names.each{|name| define_singleton_method(name, &obj.method(name.to_sym))}
end
become_evil :baz, :bar
end
C.bar
C.baz
#8 楼 @cicholgricenchos 呵呵,应该是的,我也不是太确定。。。
运行到定义 proc 代码的时候,把当时的本地变量表从 stack 复制一份到 heap 上,然后让这个 proc 引用它。所以后边再声明的变量都不会加到这个 heap 复制表(而是加到 stack 上),所以新加的变量都找不到。
然后,应该是直接编译成类似 self.send(:b) 了,而不是运行时才查询变量表链,这样效率挺高的。
哈哈,推荐这本书,配图讲的比较清楚,我看完后比以前明白了一点。
b = lambda{ p local_variables }
a = lambda { |b|
c = 1
(lambda &b).call
}
p a.call(b)
#=>等价于
p b.call
#=>等价于
p self.send(:local_variables)
a = lambda{ p b } #这里只绑定了此时此刻的变量表(链),所以它永远看不到b变量,所以会编译成self.send(:b)
b = 1
a.call #这里才执行self.send(:b),但是当前self没有b方法
a = lambda{ p b } # 这里编译时先找变量b找不到,所以会编译成执行self.send(:b)
def b
1
end
a.call # => 1 #这里才执行self.send(:b),所以没问题
*** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
检查下 mkmf.log 错误报告,也可以去 stackoverflow 搜看看..
没有啊,引号在双引号里会转义的:"\"...\""
可以用 File.foreach:
result = File.foreach(filename,encoding:'utf-8').map{|line| line[/([^(]+)/,1]}
检查下 from 地址写全了么?比如:
default from: "your_username@mail_host.com"
comment.author 等于 nil 了
比如:
你是用current_user.coments.create
吗?
检查 scheme.rb, 看看 foreign_key 是不是都是'user_id'?
#4 楼 @frankking 哈哈,确实好多没想到诶,特别是要小心破坏性操作。谢谢,共同进步!
module Enumerable
def my_inject(acc=nil, meth=nil, &blk)
meth,acc = [acc,nil] unless blk || meth
raise "shouldn't provide both method_name and block" if meth && blk
meth ||= blk
raise "should provide method_name or block" unless meth && meth.respond_to?(:to_proc)
acc,all = acc ? [acc, self] : [first, drop(1)]
all.safe_inject(acc, &meth.to_proc)
end
def safe_inject(acc)
each {|v| acc = yield acc,v}
acc
end
end
考虑情况一多,代码就矬了。。。
nice!! 感觉还需要再重构一下:
嘿嘿,我也试一试:
module Enumerable
def my_inject(acc=nil, meth=nil, &blk)
meth,acc = [acc,nil] unless blk || meth
meth = blk || meth
raise "should provide method_name or block" unless meth && meth.respond_to?(:to_proc)
to_a.arr_inject(acc, &meth.to_proc)
end
def arr_inject(acc)
acc ||= shift
each {|v| acc = yield acc,v}
acc
end
end
p (1..10).my_inject(:+)
p (1..10).my_inject(&:+)
p (1..10).my_inject(10, :+)
p (1..10).my_inject(10, &:+)
p (1..10).my_inject(0)
呵呵,如果不介意逻辑太散,可以多重构一点,把逻辑都分开:
#假设,输入是这样:
require 'ostruct'
def list
@list ||= [
{name:'tom', format: :a},
{name:'bob', format: :b},
{name:'dav', format: :c}
].map{|v| OpenStruct.new(v)}
end
# 那么:
def rule
@rule ||= {a:'xxx', b:'yyy', c:'zzz'}
end
def parse_format(format)
rule[format]
end
def info_from_item(item)
{item.name => parse_format(item.format)}
end
def hello
list.map(&method(:info_from_item)).reduce({},&:merge)
end
p hello
# 如果要加情况就:
rule.merge!(new_format: new_info)
```ruby
includes 自己推测要不要 left join。推测算法有 bug? 新版本 rails 可能不会了。
#2 楼 @luffycn 输入是什么样的呢?keys 是给定的吗? 变长是 ok 的。假如,输入是 arrys 和 keys:
one = ['a', 'b', 'c']
two = ['A', 'B', 'C']
three=['m', 'n', 'k', 'h']
four=%w(x y )
#假设输入为 arrays, keys:
arrays = [one,two,three,four]
keys = %w{one two three four}
#or
keys = %w{one two three four five six seven ...}.first(arrays.size)
#那么可以这样:
klass = Struct.new(*keys.map(&:to_sym))
objects = arrays.reduce(&:zip).map{|tup| klass.new(*tup.flatten)}.map(&:to_h)
def hash_from_arr(arr)
arr.reduce({}) do |res, element|
i = res.size
res.merge!(i=>element)
end
end
hash_from_arr(objects)
http://www.ruby-doc.org/core-2.1.5/String.html#method-i-5B-5D
可以用问号 pry 查文档:
比如查字符串的[]
方法:? ""[]
str[/.../]
#等价于
str =~ /.../ && $&
str[/.../,3]
#等价于
str =~ /.../ && $3
class << ChangeLog
...
end
#等价于打开对象的singleton_class
ChangeLog.singleton_class.class_eval do
...
end
one.zip(two).map{|one,two| {one:one,two:two}}
#或者
one.zip(two).map{|one,two| {one:one,two:two}}
.each_with_index.map{|e,i| {i=>e}}.reduce({},&:merge)
#或者
Hash[*one.zip(two).map{|one,two| {one:one,two:two}}.each_with_index.to_a.map(&:reverse).flatten]
#或者
one.zip(two).reduce({}) do |res, zp|
one,two = zp
i = res.size
res.merge!(i=>{one:one,two:two})
end