https://github.com/dgutov/robe
支持上下文语义级别的代码提示,这个只支持 Emacs。
https://github.com/Valloric/YouCompleteMe#semantic-completion-for-other-languages 从 YCM 的文档上看,好像通过 Eclim 可以实现语义级别的 Ruby 代码提示,不过我不知道有没有人弄成功过。
同学,你们高中数学教材是什么样的?能否照个照片或者告知下教材出版社?
http://ruby-china.org/topics/17742
这精华加的太随便了吧,现在这种加精华的方式还不如以前按喜欢来排列,至少以前的方式就不会出现这种问题。
#1 楼 @santochancf よくやった、達也君 :thumbsup:
x = [[]] * 4
puts x.each {|a| puts a.object_id }
x = Array.new(4) { [] }
puts x.each {|a| puts a.object_id }
# >> 70261926896280
# >> 70261926896280
# >> 70261926896280
# >> 70261926896280
# >> 70261926887120
# >> 70261926887100
# >> 70261926887060
# >> 70261926887040
#8 楼 @1272729223 你 dev 是从哪个分支 checkout 出来的?master?如果切回 master 还有,你把里面该删的删了,commit,切回 dev 不就完了。
.gitignore 只影响 Git 是否 Track 这些文件,而不是影响你的工作目录下面到底有什么。
如果你创建 dev branch 时的 branch 没有这些文件夹,那么你在 dev commit 之后,切换回去就不应该有。
Basecamp and Campfire 都有免费的版本,如果不超过 3 个人。
require 'active_support/inflector'
Core::User.name.underscore # => "core/user"
Core::User.name.underscore.gsub('/', '_').to_sym # => :core_user
* Removed deprecated `Array#uniq_by` and `Array#uniq_by!`, use native
`Array#uniq` and `Array#uniq!` instead.
4.1 就要删掉了,因为本身 Ruby 的Array#uniq
方法就可以接收 block,不过我觉得uniq_by
这个名字还是比uniq
更适合在后面接 block。
740 # Specifies whether the records should be unique or not. For example:
741 #
742 # User.select(:name)
743 # # => Might return two records with the same name
744 #
745 # User.select(:name).distinct
746 # # => Returns 1 record per distinct name
747 #
748 # User.select(:name).distinct.distinct(false)
749 # # => You can also remove the uniqueness
750 def distinct(value = true)
751 spawn.distinct!(value)
752 end
753 alias uniq distinct
754
755 # Like #distinct, but modifies relation in place.
756 def distinct!(value = true) # :nodoc:
757 self.distinct_value = value
758 self
759 end
760 alias uniq! distinct!
alias 过了,一个意思,我倒觉得楼主没考虑那么多。
PS:话说这文档是不是错了?distinct 了两次?
Array#uniq
Array#uniq!
require 'active_support/core_ext/object/blank'
a.presence || b
a = {
b: "xxx",
c: "lll",
d: "ooo",
f: "ui"
}
params = {}
params[:a] = {
b: "x",
c: "c",
d: "ds",
f: "f",
g: "g"
}
params[:b] = {
b: "x"
}
params[:c] = {
b: "x",
c: "c",
d: "ds",
f: "",
g: "g"
}
def not_empty(str)
str.to_s.strip.length != 0
end
a.all? { |key, _| params[:a].has_key?(key) && not_empty(params[:a][key]) } # => true
a.all? { |key, _| params[:b].has_key?(key) && not_empty(params[:b][key]) } # => false
a.all? { |key, _| params[:c].has_key?(key) && not_empty(params[:c][key]) } # => false
从@rei的方法改的,有 ActiveSupport 的话,用 present?就行。
def restore_record(record_id, activities)
self.send("restore_#{self.name.downcase}", record_id, activities) if can_restore?
end
def can_restore?
["Prize", "Apply", "Activity"].include?(self.name)
end
def restore_prize(record_id, activities)
activity_ids = activities.map(&:id)
record = self.deleted.find(record_id)
record.restore if activity_ids.include?(record.activity_id)
end
def restore_apply(record_id, activities)
activity_ids = activities.map(&:id)
record = self.deleted.friendly.find(record_id)
self.restore(record.id, :recursive => true) if activity_ids.include?(record.activity_id)
end
def restore_activity(record_id, activities)
record = self.deleted.friendly.find(record_id)
self.restore(record.id, :recursive => true) if activities.include?(record)
end
不要return true
或者return false
。另外我也没觉得代码有多少重复的地方。我倒觉得这个方法本身返回布尔值很不合理。
从restore_record
的方法名看,这个方法不应该返回布尔值,只要不依赖返回值,一堆条件语句删了后,应该好些,具体的还要根据实际情况自己重构,没有上下文,基本上是谈不上重构。
另外,推荐你调用方法的时候把括号加上,方法参数也是
#39 楼 @quakewang 挺简洁的实现方法,我没想到有这么个思路。
我觉这个 before_filter 不算很简单,也不算很难,但想实现的好也是绝对不是一件简单的事,其实比较符合我的初衷。
更新一下我预想的一道题:
例如实现一个 Rails 中的 before_filter 或者 around_filter:
class PeopleController < ApplicationController
before_filter :locate_person, :only => [:show, :edit, :update]
def show
puts "showing a person's data"
end
def edit
puts "displaying a person edit form"
end
def update
puts "committing updated person data to the database"
end
def create
puts "creating a new person"
end
def locate_person
puts "locating a person"
end
end
或者是实现一个简单的 XML Builder 之类的,我所想的题目应该是尽可能和 Ruby 相关的,题目看一眼所有人都明白意思,不会对题目本身有什么疑惑,题目本身也没有不需要很严格的限制,例如输入、输出。
题目的解决时间根据个人水平的不同,花费 15-60 分钟为最佳。因为我觉得像这样的余兴活动,只有在不花费过多时间的情况下,才可以长久。
#29 楼 @ctrlaltdeletel 我预想的题目不是这种 Puzzle 类的风格,就是类似:
The Problem: Example Input: Example Output:
这种类似 ACM 的题目,我觉得很多时候,使用 Ruby 都不如其它语言合适,而且很容易写成算法类的代码,就像我在顶楼提到的后面一种。
Thin 作者这个属于撘个脚手架,你来进一步完成,这也不太适合在论坛展开啊,太广了。