良心公司,帮顶
@adevadeh 中文越来越好了 @littlepxy 做主持了吗
这个实现太粗糙了点,当你要做 i18n 或者要显示“男”/“女”这样的值时,还是用 gem enumerize 会方便很多
说个八卦 rspec 自己是用 cucumber 来做测试,而 cucumber 是用 rspec 来做测试:)
历史数据迁移的话,推荐用 squeel 去做历史数据的读取
有意思的题目,应该是做应答机器人之类的吧,按道理应该用责任链模式,不过这是 ruby,可以简单点:
class WordsParser
attr_reader :type
attr_reader :words
def initialize(words)
@words = words
@type = 'other'
methods.grep(/(.*)_parser/).select do |parser_method|
if send(parser_method)
@type = parser_method.to_s.split("_parser").first
end
end
end
def silent_parser
words.nil? || words.strip.empty?
end
def shout_parser
words.upcase == words
end
def question_parser
words.end_with?("?")
end
end
class Bob
attr_reader :answer
def initialize(words_type)
@answer = send("#{words_type}_answer")
end
def silent_answer
"Fine. Be that way!"
end
def shout_answer
"Woah, chill out!"
end
def question_answer
"Sure."
end
def other_answer
"Whatever."
end
end
["a question?", "something", "WOW", ""].each do |words|
words = WordsParser.new(words)
bob = Bob.new(words.type)
puts %{words: "#{words.words}", type:"#{words.type}", answer: "#{bob.answer}"}
end
# words: "a question?", type:"question", answer: "Sure."
# words: "something", type:"other", answer: "Whatever."
# words: "WOW", type:"shout", answer: "Woah, chill out!"
# words: "", type:"silent", answer: "Fine. Be that way!"
code review 有好的工具配合可以更有效率和更容易实践,github 或 gitlab 的 PR 模式都是非常适合的,特别是他们的 UI 和 dff 的查看非常便利。
用 grape 的话,推荐直接用 grape-entity 做 json 输出,即方便可以重用又不失灵活性
这个问题曾经在 rails bestpractices 上有激烈的争论: http://rails-bestpractices.com/posts/47-fetch-current-user-in-models
#19 楼 @jiyinyiyong 对比 ruby 的 public, private, protected
#17 楼 @jiyinyiyong 是 protected 不是 private
#12 楼 @blacktulip 用 JS 我还没找到能实现 protected 成员的方法
#22 楼 @blacktulip 优势太多了,这里提到部分 http://www.iplaysoft.com/sublimetext.html
#8 楼 @blacktulip st2 出来后一种果断抛弃 textmate 了,确实用过就不会有疑问了
object_name.method_name()才是策马扬鞭
看不懂,楼主是吐槽 () 可以省略会跟对象的“属性”混淆吗?ruby 没有“属性”这一说法,只有方法,看似属性的,其实都只是其成员变量的读方法。另外,如果是要得到该方法的对象,可以用object_name.method(:method_name)
,这个只是语言特性,适应就好。
“能不能用 ruby 写个前端框架啊”楼主,你要的是这个http://opalrb.org/?
才发现有个 python 节点
@william 再次惊艳全场,非常精彩
I cannot agree with you more
我觉得他举的例子不对,如果要定义一个人“类”,那就应该定义好该有的基本属性,如头,手等,头可以有大小差异,但不能没有头。但他其实要处理的应该是一个“生物”类,因为长得像人“类”而他自己以为是人”类“了,他现在想给每个遇到的生物”类“都意图加上一个“带帽子”的行为,那肯定会有异常。