我正在ruby中的对象中重新定义一个方法,我需要将新方法作为闭包.例如:
def mess_it_up(o)
x = "blah blah"
def o.to_s
puts x # Wrong! x doesn't exists here, a method is not a closure
end
end
Run Code Online (Sandbox Code Playgroud)
现在,如果我定义一个Proc,它就是一个闭包:
def mess_it_up(o)
x = "blah blah"
xp = Proc.new {||
puts x # This works
end
# but how do I set it to o.to_s.
def o.to_s
xp.call # same problem as before
end
end
Run Code Online (Sandbox Code Playgroud)
有什么想法怎么做?
谢谢.
我正在尝试使用2D ruby数组时遇到一些问题,当我进行数组切片时,我的LOC减少了很多.所以,例如,
require "test/unit"
class LibraryTest < Test::Unit::TestCase
def test_box
array = [[1,2,3,4],[3,4,5,6], [5,6,7,8], [2,3,4,5]]
puts array[1][2..3] # 5, 6
puts array[1..2][1] # 5, 6, 7, 8
end
end
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法获得对角切片?让我们说我想从[0,0]开始并想要一个3的对角切片.然后我会得到[0,0],[1,1],[2,2]的元素,我会得到一个类似的数组[1,4,7]例如上面.是否有任何神奇的单行红宝石代码可以实现这一目标?3次做{某些神奇的东西?}
可能重复:
您更喜欢Ruby IDE?
什么是Windows的优秀和免费的Ruby编辑器?谢谢!
因为我总是打字,所以我对轨道和编程很新,所以很容易.提前致谢.
我已成功地遵循Ryan Bates的初始教程,了解如何在15分钟内构建博客.如果您不知道本教程将指导您创建帖子并允许对这些帖子发表评论.它甚至通过在帖子show.html.erb页面上创建和显示评论来介绍AJAX.一切都很棒.
这是打嗝,当Ryan带你通过本教程时他会清除comments_controller并只显示创建注释的代码.我试图添加编辑和销毁评论的能力.似乎无法让它工作,不断删除实际的帖子而不是评论(日志显示我一直向PostsController发送DELETE请求).这是我的代码:
class CommentsController < ApplicationController
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create!(params[:comment])
respond_to do |format|
format.html { redirect_to @post }
format.js
end
end
def destroy
@comment = Comment.find(params[:id])
@comment.destroy
respond_to do |format|
format.html { redirect_to(posts_url) }
format.xml { head :ok }
end
end
end
Run Code Online (Sandbox Code Playgroud)
/views/posts/show.html.erb
<%= render :partial => @post %>
<p>
<%= link_to 'Edit', edit_post_path (@post) %> |
<%= link_to 'Destroy', @post, :method => :delete, :confirm => "Are you sure?" %> |
<%= …Run Code Online (Sandbox Code Playgroud) 可能重复:
使用Sinatra提供静态文件
我注意到Sinatra无法识别公用文件夹子目录中的index.html文件,并在url指向目录时返回错误而未指定文件名.
例如,如果用户输入"www.mydomain.com/subdiretory/"之类的网址,则Sinatra无法识别该目录中是否存在index.html文件.
我的公用文件夹中有数百个子目录,因此无法在代码中指定每个子目录(并且子目录的数量不断增长).
如果url指向没有文件名的目录,如果公共文件夹的子目录中有index.html文件,我怎么能告诉Sinatra单独离开我的Web服务器(Apache)(到服务器index.html文件)?
当我学习Ruby语言时,我越来越接近实际的编程.我在想创造一个简单的纸牌游戏.我的问题不是面向Ruby,但我确实想知道如何用真正的OOP方法解决这个问题.在我的纸牌游戏中,我希望有四个玩家,使用标准牌组,52张牌,没有笑话/通配符.在游戏中,我不会将ace用作双卡,它始终是最高卡.
所以,我想知道的编程问题如下:
如何对卡片组进行分类/随机化?有四种类型,每种类型有13个值.最终只能有唯一值,因此选择随机值可能会生成重复值.
我怎样才能实现简单的AI?由于有大量的纸牌游戏,有人会想出这部分,所以参考会很棒.
我是一个真正的Ruby nuby,我的目标是学习解决问题,所以伪代码会很棒,只是为了理解如何以编程方式解决问题.如果不清楚,我为我的语法和写作风格道歉,因为它不是我的母语.
此外,指向解释此类挑战的网站的指针将是一个很好的资源!
感谢您的意见,解答和反馈!
我的一个朋友要求创建一个静态网站,我发现使用Sinatra制作这样的网站是一种纯粹的快乐.我刚写了这样的所有路线:
get '/index.html' do
haml :index
end
get '/app.css' do
sass :app
end
....
Run Code Online (Sandbox Code Playgroud)
所以我能够使用布局,haml和sass来快速将网站放在一起.
创建我使用的静态站点
wget -r -l2 http://localhost:4567
Run Code Online (Sandbox Code Playgroud)
哪个确实工作得很好,但我想有一个更好的方法从Sinatra代码创建一个静态网站?
我试图在ruby中编写一些代码(使用jruby),用jrubyc编译成java字节码,并部署到远程机器上,它将在JVM上运行(没有可用的ruby).
只要我乐意坚持标准的jruby库,一切都很好.正如在jruby网站上所解释的,我只是将jruby-complete.jar库复制到远程机器并在运行时将其包含在类路径中.我解雇我编译的脚本,它的工作原理:很酷!
当我需要一些其他库(通常是rubygems)来运行我的脚本时,问题就开始了.
我知道很酷的东西,比如rawr,我成功测试了 - 把你所需要的东西放在一个包中.然而,这不是我正在寻找的解决方案:我将有许多小脚本独立运行,我不希望它们中的每一个都增长到至少10 MB只是因为我疯狂地在每个中包含jruby-complete.jar他们.
我想要的是为我需要使用的每个库编译一个.jar,将它们全部放在远程机器上的公共文件夹中,并在运行我编译的jruby脚本时在运行时将它们包含在类路径中JVM.
这就是说,我试着按照这里的说明进行操作:http: //blog.nicksieger.com/articles/2009/01/10/jruby-1-1-6-gems-in-a-jar
我尝试了完全显示的例子在那里,有"慢性"宝石.一步一步走:
编写两行测试脚本,将其保存为testt.rb:
需要'慢性'
Chronic.parse('明天')
编译:jrubyc testt.rb
我收到以下错误:
异常在线程"主要"文件:/Users/ave2/NetBeansProjects/jrubywatir/lib/jruby-complete.jar /METAINF/jruby.home/lib/ruby/site_ruby/shared/builtin/core_ext/symbol.rb:1:在`const_missing'中:
来自testt.rb的未初始化常量Chronic(NameError):2
...内部jruby堆栈
从Module.const_missing(testt.rb:2)中
脱离(未知).(未知)(:1)
我真的不明白我做错了什么,我完全坚持这个.我是Ruby中的菜鸟,更习惯Python:不要错过转换异教徒的机会!:-) 谢谢.
我正在尝试编写一个rake任务,它将设置一个镜像我的项目的环境.
task :environment do
require 'rubygems'
require 'sequel'
# require 'my_projects_special_files'
end
task :foo => [:environment] do
require 'irb'
IRB.start
end
Run Code Online (Sandbox Code Playgroud)
导致irb抱怨"foo"不存在(任务的名称)
10:28:01:irb_test >> rake foo --trace (in /Users/mwlang/projects/personal/rake/irb_test) ** Invoke foo (first_time) ** Invoke environment (first_time) ** Execute environment ** Execute foo rake aborted! No such file or directory - foo /opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `initialize' /opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `open' /opt/local/lib/ruby/1.8/irb/input-method.rb:68:in `initialize' /opt/local/lib/ruby/1.8/irb/context.rb:80:in `new' /opt/local/lib/ruby/1.8/irb/context.rb:80:in `initialize' /opt/local/lib/ruby/1.8/irb.rb:92:in `new' /opt/local/lib/ruby/1.8/irb.rb:92:in `initialize' /opt/local/lib/ruby/1.8/irb.rb:57:in `new' /opt/local/lib/ruby/1.8/irb.rb:57:in `start' /Users/mwlang/projects/personal/rake/irb_test/Rakefile:9
我已经在rails上构建了一个带ruby的博客应用程序,我正在尝试实现搜索功能.博客应用程序允许用户标记帖子.标签是在自己的表格中创建的belong_to :post.创建标记时,标记表中的记录也是如此,其中标记的名称为tag_name并由post_id关联.标签是字符串.
我试图允许用户以任何顺序搜索任何单词tag_name.这就是我的意思.让我们说一个特定的帖子有一个标签是'红宝石代码控制器'.在我当前的搜索功能中,如果用户搜索"ruby","ruby code"或"ruby code controller",则会找到该标记.如果用户键入'ruby controller',则无法找到.
基本上我所说的是我希望在搜索中输入的每个单词都被搜索,而不一定是输入到搜索中的"字符串".
我一直在尝试提供多个文本字段以允许用户输入多个单词,并且还在使用下面的代码,但似乎无法完成上述操作.我是ruby和rails的新手很抱歉,如果这是一个明显的问题,在安装gem或插件之前,我想我会检查是否有一个简单的修复.这是我的代码:
查看:/views/tags/index.html.erb
<% form_tag tags_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search], :class => "textfield-search" %>
<%= submit_tag "Search", :name => nil, :class => "search-button" %>
</p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
TagsController
def index
@tags = Tag.search(params[:search]).paginate :page => params[:page], :per_page => 5
@tagsearch = Tag.search(params[:search])
@tag_counts = Tag.count(:group => :tag_name,
:order => 'count_all DESC', :limit => 100)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml …Run Code Online (Sandbox Code Playgroud)