小编ste*_*lag的帖子

如何检查变量是否是类的实例?

在Java中,你可以做到instanceof.是否有Ruby等价物?

ruby inheritance introspection

62
推荐指数
4
解决办法
6万
查看次数

Ruby - 关键字参数 - 您能将所有关键字参数视为哈希吗?怎么样?

我有一个看起来像这样的方法:

def method(:name => nil, :color => nil, shoe_size => nil) 
  SomeOtherObject.some_other_method(THE HASH THAT THOSE KEYWORD ARGUMENTS WOULD MAKE)
end
Run Code Online (Sandbox Code Playgroud)

对于任何给定的调用,我可以接受任意值的任意组合.我喜欢命名参数,因为我可以查看方法的签名以查看可用的选项.

我不知道的是,如果上面的代码示例中有大写字母描述的快捷方式.

回到过去,它曾经是:

def method(opts)
  SomeOtherObject.some_other_method(opts)
end
Run Code Online (Sandbox Code Playgroud)

优雅,简单,几乎作弊.

这些关键字参数是否有快捷方式,还是我必须在方法调用中重构我的选项哈希?

ruby hash arguments options keyword

30
推荐指数
2
解决办法
6709
查看次数

为什么Ruby的"获取"包括结束换行?

我从来不需要我得到的结尾换行符gets.有一半时间我忘了它chomp,这是一个痛苦....

为什么会这样?

ruby newline language-design

18
推荐指数
3
解决办法
6345
查看次数

为什么Ruby的Float#round行为与Python不同?

" Python中"round"函数的行为 "观察到Python循环浮动如下:

>>> round(0.45, 1)
0.5
>>> round(1.45, 1)
1.4
>>> round(2.45, 1)
2.5
>>> round(3.45, 1)
3.5
>>> round(4.45, 1)
4.5
>>> round(5.45, 1)
5.5
>>> round(6.45, 1)
6.5
>>> round(7.45, 1)
7.5
>>> round(8.45, 1)
8.4
>>> round(9.45, 1)
9.4
Run Code Online (Sandbox Code Playgroud)

接受的答案证实这是由于浮点数的二进制表示不准确引起的,这都是合乎逻辑的.

假设Ruby浮点数和Python一样不准确,那么Ruby如何像人类一样漂浮?Ruby欺骗了吗?

1.9.3p194 :009 > 0.upto(9) do |n|
1.9.3p194 :010 >     puts (n+0.45).round(1)
1.9.3p194 :011?>   end
0.5
1.5
2.5
3.5
4.5
5.5
6.5
7.5
8.5
9.5
Run Code Online (Sandbox Code Playgroud)

ruby python rounding floating-accuracy

13
推荐指数
2
解决办法
865
查看次数

为什么这个正则表达式在sed中的运行方式与Perl/Ruby不同?

我有一个正则表达式给我一个结果,sed但在Perl(和Ruby)中有另一个结果.

我有字符串one;two;;three,我想突出显示由;.分隔的子字符串.所以我在Perl中执行以下操作:

$a = "one;two;;three";
$a =~ s/([^;]*)/[\1]/g;
print $a;
Run Code Online (Sandbox Code Playgroud)

(或者,在Ruby中:print "one;two;;three".gsub(/([^;]*)/, "[\\1]").)

结果是:

[one][];[two][];[];[three][]
Run Code Online (Sandbox Code Playgroud)

(我知道虚假空子串的原因.)

奇怪的是,当我运行相同的正则表达式时,sed我得到了不同的结果.我跑:

echo "one;two;;three" | sed -e 's/[^;]*/[\0]/g'
Run Code Online (Sandbox Code Playgroud)

我得到:

[one];[two];[];[three]
Run Code Online (Sandbox Code Playgroud)

造成这种不同结果的原因是什么?

编辑:

有人回答"因为sed不是perl".我知道.我问我的问题的原因是因为我不明白如何sed应对零长度匹配.

ruby regex perl sed

12
推荐指数
1
解决办法
887
查看次数

如何使用Array#sample(n,random:rng)语法?

文件Array#sample说它可以采取rng:

如果给出rng,它将用作随机数发生器.

范围如何作为随机数发生器起作用,或者为什么这样的东西有用呢?

哈希表单也表明还有其他选项,但我找不到任何关于它们的信息.尝试[1,2,3,4,5].sample(3)表现就像[1,2,3,4,5].sample(3, random: 1..2).

ruby random syntax ruby-1.9.3

7
推荐指数
1
解决办法
4115
查看次数

如何使用Regexp.union指定Regexp选项

在" 如何从文本中删除URL? "中,建议使用以下代码:

require 'uri'
#...
schemes_regex = /^(?:#{ URI.scheme_list.keys.join('|') })/i
#...
Run Code Online (Sandbox Code Playgroud)

我试图将其改进为:

schemes_regex = Regexp.union(URI.scheme_list.keys)
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚应该如何指定IGNORECASEoption(i).

ruby regex syntax

7
推荐指数
1
解决办法
980
查看次数

在Ruby中的类级别添加Enumerable mixin

我在我的Rails应用程序中使用postgres模式,因此没有明确的方法来查询所有公司(对于我们自己的分析).我想实现迭代所有公司的每个方法,并适当地切换postgres模式.

我想打电话给:

Company.each do |company|
  # do something in the context of each company
end
Run Code Online (Sandbox Code Playgroud)

但是我也希望获得一些其他的Enumerable方法collect,例如在所有公司中获取所有经理的示例:

Company.collect do |company|
  Users.managers
end
Run Code Online (Sandbox Code Playgroud)

目前我有这个效果很好

class Company < ActiveRecord::Base
  # ...

  def self.each(&block)
    Company.all.each do |company|
      if Schemas.include? company.subdomain
        # this changes to that company's schema so all queries are scoped
        Apartment::Database.switch company.subdomain

        yield company if block_given?
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

但是如何在类级而不是实例级别获取Enumerable mixin.

也就是说,当include Enumerable在类中时,Enumerable方法被调用为

company = Company.new
# which might iterate over the contents (users?) in a company
company.collect …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails

7
推荐指数
1
解决办法
161
查看次数

安装后无法加载Metasploit

通过darkoperator/MSF-Installer对Metaploit进行istallation尝试启动msfconsole并返回:

/usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- /usr/local/bin/config/boot (LoadError)
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /usr/local/bin/msfconsole:23:in `<main>'
Run Code Online (Sandbox Code Playgroud)

使用:

Linux ubuntu 3.13.0-32-generic 
Run Code Online (Sandbox Code Playgroud)

有人有个主意吗?

ruby ubuntu metasploit

7
推荐指数
2
解决办法
6740
查看次数

在Ruby表达式中' - '后留空的效果

今天我在Rails控制台上尝试了一些事情,这发生了,

2.0.0p247 :009 > Date.today -29.days
 => Fri, 07 Feb 2014 
2.0.0p247 :010 > Date.today - 29.days
 => Thu, 09 Jan 2014 
Run Code Online (Sandbox Code Playgroud)

我很困惑.我可以看到我遗漏了一些基本的东西.但它只是引起我的注意!任何人都可以解释为什么会这样吗?

ruby math ruby-on-rails date

6
推荐指数
1
解决办法
75
查看次数