在Java中,你可以做到instanceof.是否有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)
优雅,简单,几乎作弊.
这些关键字参数是否有快捷方式,还是我必须在方法调用中重构我的选项哈希?
我从来不需要我得到的结尾换行符gets.有一半时间我忘了它chomp,这是一个痛苦....
为什么会这样?
" 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) 我有一个正则表达式给我一个结果,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应对零长度匹配.
文件Array#sample说它可以采取rng:
如果给出rng,它将用作随机数发生器.
范围如何作为随机数发生器起作用,或者为什么这样的东西有用呢?
哈希表单也表明还有其他选项,但我找不到任何关于它们的信息.尝试[1,2,3,4,5].sample(3)表现就像[1,2,3,4,5].sample(3, random: 1..2).
在" 如何从文本中删除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).
我在我的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) 通过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)
有人有个主意吗?
今天我在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)
我很困惑.我可以看到我遗漏了一些基本的东西.但它只是引起我的注意!任何人都可以解释为什么会这样吗?