小编And*_*imm的帖子

使用带有默认值的选项哈希作为ruby中的参数是一种很好的干净方法

假设我想要一个像这样调用的方法:

 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 hash

8
推荐指数
4
解决办法
5266
查看次数

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)

你可能会忘记在受保护的方法后"公开".

似乎可以使用元编程实现这一点.有什么想法?

ruby access-specifier

8
推荐指数
2
解决办法
2219
查看次数

解决红宝石中的旅行商问题(50多个地点)

我在一家快递公司工作.我们目前通过"手"解决了50多个地点的路线.

我一直在考虑使用谷歌地图API解决这个问题,但我已经读到有24点的限制.

目前我们在服务器中使用rails,所以我正在考虑使用ruby脚本来获取50多个位置的坐标并输出合理的解决方案.

你会用什么算法来解决这个问题?

Ruby是一种很好的编程语言来解决这类问题吗?

你知道任何现有的ruby脚本吗?

ruby algorithm google-maps ruby-on-rails traveling-salesman

8
推荐指数
1
解决办法
4502
查看次数

如何在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

ruby

8
推荐指数
2
解决办法
2375
查看次数

我应该如何利用Ruby?

红宝石?红宝石?红宝石?什么样的风格?

我知道答案 - 我只是想确保问题在那里,提问者知道有一个正确的表格.

另外,我应该将"宝石"资本化为"创业板"吗?

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)

ruby coding-style capitalization

8
推荐指数
2
解决办法
787
查看次数

在Ruby中运行得更快:定义别名方法还是使用alias_method?

以后调用的速度更快:

def first_method?() second_method?() end
Run Code Online (Sandbox Code Playgroud)

要么

alias_method :first method, :second_method
Run Code Online (Sandbox Code Playgroud)

如果可能的原因?

(注意:我不问什么更好/更好等等 - >只有原始速度以及为什么它更快有趣这里)

ruby performance pointer-aliasing

8
推荐指数
2
解决办法
416
查看次数

从/ proc/stat计算用户,nice,sys,idle,iowait,irq和sirq

/ proc/stat显示用户,nice,sys,idle,iowait,irq和sirq的滴答:

cpu 6214713 286 1216407 121074379 260283 253506 197368 0 0 0

如何使用这些值计算用户的个人利用率(%),等等?就像'top'或'vmstat'中显示的值一样.

c python linux kernel procfs

8
推荐指数
2
解决办法
5274
查看次数

Array# - (减法运算符)如何比较元素是否相等?

当我调用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

8
推荐指数
1
解决办法
1763
查看次数

rails 3.1:如何重写inherited_resources并允许rails scaffolding再次正常工作?

解决方案:查看评论

构建一个新的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?

ruby-on-rails scaffolding activeadmin

8
推荐指数
1
解决办法
1552
查看次数

如何在像instance_eval方法的块中更改self?

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 metaprogramming self

8
推荐指数
1
解决办法
3736
查看次数