如果 status 是 enum 类型,controller 里@posts = Post.send params[:status]
用gets
吧
方法里的 self 是 DefaultWarningConfig 的实例,不是 DefaultWarningConfig 本身。def 会打开一个新的作用域,def 里面的 self 跟外面的 self 不是一个东西。
self.class是DefaultWarningConfig
说明 self 是 DefaultWarningConfig 的实例。
class DefaultWarningConfig
COUNT = 10
p self # DefaultWarningConfig 本身
def instance_method
p self # DefaultWarningConfig的一个实例
P self.class # DefaultWarningConifg本身
p self.class::COUNT # 10
p DefaultWarningConfig::COUNT # 10
p self::COUNT # Error
end
end
张店人帮顶
define_method(k.to_sym) { v }
加个括号就好了。
E = mc2 = Class.singleton_class.singleton_class
……不知道有什么用,求指导
这样可以么?
thr = Thread.new { Thread.current[:return] = "some hash" }
thr.join
thr[:return] # some hash
JRuby 不支持 C extension 的吧
arr = [["a:1","b:0"],["c:2","b:0","d:5"]]
hash = {}
arr_size = arr.size
arr.each_with_index do |a, i|
a.each_with_object({}) do |str, h|
str =~ /^(.*):(.*)$/
h[$1] = $2
end.each do |k, v|
hash[k] ||= [nil] * arr_size
hash[k][i] = v
end
end
p hash
你的需求应该subWorkFlowPath = doc.elements.map("library/section") { |e| e.attributes["name"] }
ruby所有的方法都有返回值,Array#each返回数组本身,即puts subWorkFlowPath
跟puts doc.elements
是一样的
用 method_missing 也可以
有
require 'date'
day1 = Date.new(2013, 10, 9)
day2 = Date.new(2014, 5, 20)
(day1..day2).each do |i|
# do something
end
我认为一个对象的单例方法优先级最高,上面的第二段代码跟我下面的代码结果一致。
module Foo
def bar
"bar in the Module Foo"
end
end
class FooBar
end
f = FooBar.new
class << f
def bar
"bar in class FooBar"
end
end
f.extend Foo
f.bar
主要是 Ruby 的钩子方法,让父类(或 module)对子类(或 include module 的对象)的控制能力异常的强大。
def huiwen str
0.upto(str.size / 2) {|i| return false if str[i] != str[-(i + 1)]}
true
end
之前写过凑 24 点的,可以借鉴一下 https://gist.github.com/piecehealth/9342052
a = [*0..9]
def c arr, n
return arr.map {|i| [i]} if n == 1
rets = []
arr.each_with_index do |ele, i|
rets += c(arr[i + 1, arr.size - i - 1], n - 1).map {|a| [ele, *a]}
end
rets
end
def all_sub_arrs arr
rets = []
1.upto(arr.size) do |i|
rets += c(arr, i)
end
rets
end
require 'benchmark'
Benchmark.bm do |x|
x.report do
result = []
1.upto(a.size) {|i| a.combination(i).each {|sub_arr| result << sub_arr.to_a}}
end
x.report {result = all_sub_arrs a}
end
自己实现 combination 肯定没有 ruby 自带的快,Array 内置的方法都是 c 写的。
1.upto(a.size) {|i| a.combination(i).map {|sub_arr| puts sub_arr.to_a.join(', ')}}
arr = (0..9).to_a.shuffle
[arr[0, 2], arr[2, 4], arr[6, 4]].map &:sort
两行不行么
没看见所有
人家开头就说了,Rails Tutorial 不是面向纯新手的
Inexperienced programmers: The Rails Tutorial is not aimed principally at beginning programmers, and web applications, even relatively simple ones, are by their nature fairly complex.
不过对我(非职业 web 开发人员)来说,Rails Guides 更合适一些。
我的《Ruby 元编程》就是在上海书城买的……陪别人逛的时候偶尔看到,马上就买了。