假设我想要一个像这样调用的方法:
tiger = create_tiger( :num_stripes => 12, :max_speed => 43.2 )
tiger.num_stripes # will be 12
Run Code Online (Sandbox Code Playgroud)
其中一些选项具有默认值:
tiger = create_tiger( :max_speed => 43.2 )
tiger.num_stripes # will have some default value
Run Code Online (Sandbox Code Playgroud)
在方法实现中实现默认行为的一种很好的惯用ruby方法是什么?
Ruby似乎没有像这样定义受保护/私有块的工具:
protected do
def method
end
end
Run Code Online (Sandbox Code Playgroud)
这比较好
protected
def method
end
public
Run Code Online (Sandbox Code Playgroud)
你可能会忘记在受保护的方法后"公开".
似乎可以使用元编程实现这一点.有什么想法?
我在一家快递公司工作.我们目前通过"手"解决了50多个地点的路线.
我一直在考虑使用谷歌地图API解决这个问题,但我已经读到有24点的限制.
目前我们在服务器中使用rails,所以我正在考虑使用ruby脚本来获取50多个位置的坐标并输出合理的解决方案.
你会用什么算法来解决这个问题?
Ruby是一种很好的编程语言来解决这类问题吗?
你知道任何现有的ruby脚本吗?
numbers = 1..10
print numbers.map {|x| x*x}
# I want to do:
square = {|x| x*x}
print numbers.map square
Run Code Online (Sandbox Code Playgroud)
因为语法更简洁.我有办法做到这一点,而不必使用def+ end?
红宝石?红宝石?红宝石?什么样的风格?
我知道答案 - 我只是想确保问题在那里,提问者知道有一个正确的表格.
另外,我应该将"宝石"资本化为"创业板"吗?
class TestLanguageName < Test::Unit::TestCase
def test_language_name
assert_correct_language_name StackOverflow.new.describe_language("RuBy")
end
end
class StackOverflow
def describe_language(string)
# Which of the following?
methods = [:upcase, :capitalize, :downcase]
string.send(methods[rand(3)])
end
end
Run Code Online (Sandbox Code Playgroud) 以后调用的速度更快:
def first_method?() second_method?() end
Run Code Online (Sandbox Code Playgroud)
要么
alias_method :first method, :second_method
Run Code Online (Sandbox Code Playgroud)
如果可能的原因?
(注意:我不问什么更好/更好等等 - >只有原始速度以及为什么它更快有趣这里)
/ proc/stat显示用户,nice,sys,idle,iowait,irq和sirq的滴答:
cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0
如何使用这些值计算用户的个人利用率(%),等等?就像'top'或'vmstat'中显示的值一样.
当我调用Array#-它似乎没有调用我正在比较的字符串上的任何比较方法:
class String
def <=>(v)
puts "#{self} <=> #{v}"
super(v)
end
def ==(v)
puts "#{self} == #{v}"
super(v)
end
def =~(v)
puts "#{self} =~ #{v}"
super(v)
end
def ===(v)
puts "#{self} == #{v}"
super(v)
end
def eql?(v)
puts "#{self}.eql? #{v}"
super(v)
end
def equal?(v)
puts "#{self}.equal? #{v}"
super(v)
end
def hash()
puts "#{self}.hash"
super
end
end
p %w{one two three} - %w{two}
Run Code Online (Sandbox Code Playgroud)
它只是返回:
["one", "three"]
Run Code Online (Sandbox Code Playgroud)
那么,Array#-做什么?
另外,我使用的是Ruby 1.9.2p290.在1.8.7中它似乎导致无限循环.
ruby arrays operator-overloading subtraction comparison-operators
解决方案:查看评论
构建一个新的rails 3.1 app.从一个基本的blog_entries模型开始,以获得它的悬念.没有惊喜.
然后我添加了ActiveAdmin,让我的现有模型正常工作.
但是现在当我尝试用这个来构建一个新模型/ etc时:
rails g scaffold Community name:string guid:string
Run Code Online (Sandbox Code Playgroud)
一切似乎都是正确的(视图,迁移),除了控制器没有CRUD选项,看起来像这样:
class CommunitiesController < InheritedResources::Base
end
Run Code Online (Sandbox Code Playgroud)
问题是ActiveAdmin使用inherited_resources来防止手动rails脚手架正常工作.
尽管ActiveAdmin使用inherited_resources,有没有人知道如何"正确"强制rails到scaffold?
instance_eval方法在其块中更改self,例如:
class D; end
d = D.new
d.instance_eval do
puts self # print something like #<D:0x8a6d9f4>, not 'main'!
end
Run Code Online (Sandbox Code Playgroud)
如果我们定义一个方法selfelf(或任何其他方法(除了instance_eval)接受一个块),当print self时,我们将得到'main',这与instance_eval方法不同.eg:
[1].each do |e|
puts self # print 'main'
end
Run Code Online (Sandbox Code Playgroud)
如何定义像instance_eval这样的方法(采用块)?提前致谢.
ruby ×8
activeadmin ×1
algorithm ×1
arrays ×1
c ×1
coding-style ×1
google-maps ×1
hash ×1
kernel ×1
linux ×1
performance ×1
procfs ×1
python ×1
scaffolding ×1
self ×1
subtraction ×1