我有一个包含一些元素的数组.如何才能获得数组中每个元素的出现?
例:
鉴于:
a = ['cat', 'dog', 'fish', 'fish']
Run Code Online (Sandbox Code Playgroud)
结果:
a2 #=> {'cat' => 1, 'dog' => 1, 'fish' => 2}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
如果我执行以下操作并在Ruby 1.9下打开警告:
$VERBOSE = true
x = 42
5.times{|x| puts x}
Run Code Online (Sandbox Code Playgroud)
我明白了
warning: shadowing outer local variable - x
Run Code Online (Sandbox Code Playgroud)
据推测,这与使用x作为块参数以及块外的变量有关,但"阴影"是什么意思?
我一直在努力更新我的宝石(https://github.com/ivanoats/whm_xml_api_ruby上的 whm_xml ),以使其与ruby 1.9.2,最新的rubygems,最新的捆绑包,最新的rdoc,最新的rake一起使用.它在1.8.7中工作正常,但仅在1.9.2中有"未初始化的常量Rake :: DSL"错误.我认为rake 0.9.2固定了但可能没有?我在StackOverflow上已经阅读了很多,但仍然被卡住了.关于在哪里看的任何想法?
ivan:~/Development/ruby/whm_xml_api_ruby [git:master+] ? bundle exec rake -T
(in /Users/ivan/Development/ruby/whm_xml_api_ruby)
rake aborted!
uninitialized constant Rake::DSL
/Users/ivan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rake.rb:2482:in `const_missing'
/Users/ivan/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.9.2/lib/rake/tasklib.rb:8:in `<class:TaskLib>'
/Users/ivan/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.9.2/lib/rake/tasklib.rb:6:in `<module:Rake>'
/Users/ivan/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.9.2/lib/rake/tasklib.rb:3:in `<top (required)>'
/Users/ivan/.rvm/gems/ruby-1.9.2-p180/gems/rdoc-3.6.1/lib/rdoc/task.rb:37:in `require'
/Users/ivan/.rvm/gems/ruby-1.9.2-p180/gems/rdoc-3.6.1/lib/rdoc/task.rb:37:in `<top (required)>'
/Users/ivan/Development/ruby/whm_xml_api_ruby/Rakefile:3:in `require'
/Users/ivan/Development/ruby/whm_xml_api_ruby/Rakefile:3:in `<top (required)>'
/Users/ivan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rake.rb:2373:in `load'
/Users/ivan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rake.rb:2373:in `raw_load_rakefile'
/Users/ivan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rake.rb:2007:in `block in load_rakefile'
/Users/ivan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rake.rb:2058:in `standard_exception_handling'
/Users/ivan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rake.rb:2006:in `load_rakefile'
/Users/ivan/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/1.9.1/rake.rb:1991:in `run'
/Users/ivan/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.9.2/bin/rake:32:in `<top (required)>'
/Users/ivan/.rvm/gems/ruby-1.9.2-p180/bin/rake:19:in `load'
/Users/ivan/.rvm/gems/ruby-1.9.2-p180/bin/rake:19:in `<main>'
Run Code Online (Sandbox Code Playgroud) 我刚刚安装了RVM,而且我正在阅读The Well-Grounded Rubyist一书.在第一章中,我应该尝试ri String#upcase查看关于upcase方法的文档,但是我收到一条消息说:
没有人知道String#upcase
我在这里发现了一些帖子告诉我这可能是因为没有安装RDoc.但是我不明白如何解决它.
我使用的是Mac OSX 10.6和最新的RVM.除了标准的Ruby解释器以及Apple的Developer工具包之外,我只安装了1.9.2.
我有一个ruby gem,它对每个操作系统都有不同的依赖关系.我必须明确地写下所有这些:
在Mac OS X上:
Run Code Online (Sandbox Code Playgroud)gem install livereload在Linux上:
Run Code Online (Sandbox Code Playgroud)gem install rb-inotify livereload在Windows上:
Run Code Online (Sandbox Code Playgroud)gem install eventmachine-win32 win32-changenotify win32-event livereload
我可以稍微调整一下gemspec,这样gem install livereload每个操作系统的安装说明都很简单吗?
我的rails应用程序中有100多个模型,只是为了组织,我将它们分成文件夹,所有这些仍然在主模型文件夹下,只是为了更简单地浏览项目并查看相关的文件.
这是一个坏主意吗?rails的方法是什么?
每当我尝试扩展ruby模块时,我都会丢失模块方法.既不包含也不延伸都不会这样做.考虑一下片段:
module A
def self.say_hi
puts "hi"
end
end
module B
include A
end
B.say_hi #undefined_method
Run Code Online (Sandbox Code Playgroud)
无论B包括还是扩展A,都不会定义say_hi.
有没有办法完成这样的事情?
我希望在Ruby中找到一种方法来选择数组中的每个第n项.例如,选择每一个项目将转换:
["cat", "dog", "mouse", "tiger"]
Run Code Online (Sandbox Code Playgroud)
成:
["dog", "tiger"]
Run Code Online (Sandbox Code Playgroud)
是否有Ruby方法可以这样做,还是有其他方法可以做到这一点?
我尝试过使用类似的东西:
[1,2,3,4].select {|x| x % 2 == 0}
# results in [2,4]
Run Code Online (Sandbox Code Playgroud)
但这只适用于具有整数而不是字符串的数组.
有关如何在Ruby中实现DSL的优秀在线教程是什么?我正在寻找解释整个过程的动手实例.
我知道在关于DSL和Ruby的好书上有这个问题:关于基于Ruby的DSL的好书.
我正在使用open-uri来打开URL.
resp = open("http://sub_domain.domain.com")
Run Code Online (Sandbox Code Playgroud)
如果它包含下划线,我会收到一个错误:
URI::InvalidURIError: the scheme http does not accept registry part: sub_domain.domain.com (or bad hostname?)
我理解这是因为根据RFC URL只能包含字母和数字.有没有解决方法?