草庐IT

Ruby:变量是 ruby​​ 中的对象吗?

我听说ruby中的一切都是对象。我面试的时候回答说变量是对象,面试官说NO。有人知道真相吗? 最佳答案 “在ruby​​中,一切都是对象”基本上是正确的。但更准确地说,我会说任何可以分配给变量或从方法返回的值都是对象。变量是对象吗?并不真地。变量只是一个对象的名称(也称为“指针”),您可以通过它在内存中找到它并对其进行操作。shajin=Person.new()在这个片段中,我们有一个变量shajin,它指向一个对象(person类的一个实例)。变量只是对象的标识符,而不是对象本身。我认为这是一个棘手的问题。归根结底,面向对象是人类

ruby - 随机生成测试数据是一种不好的做法吗?

自从我开始使用rspec以来,我就对固定装置的概念产生了疑问。我主要关心的是:我使用测试来揭示令人惊讶的行为。我并不总是足够聪明,可以为我正在测试的示例列举所有可能的边缘情况。使用硬编码的固定装置似乎有局限性,因为它只在我想象的非常具体的情况下测试我的代码。(诚​​然,我的想象力也限制了我测试的案例。)我使用测试作为代码文档的一种形式。如果我有硬编码的fixture值,就很难揭示特定测试试图展示的内容。例如:describeItemdodescribe'#most_expensive'doit'shouldreturnthemostexpensiveitem'doItem.most_e

ruby - Ruby 中 undefined variable 等于 nil 吗?

我得到错误作为undefinedvariable,我知道nil如果用作bool值则被评估为false:ifyputs"Something"end 最佳答案 undefinedvariable不等于nil。未定义的instance变量返回nil(同样,如果它未定义)。y引发异常@y返回nil 关于ruby-Ruby中undefinedvariable等于nil吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow

ruby - 我可以在 Ruby 的 if/else 中使用花括号吗?

为什么我不能在if/else结构中使用大括号?我离开了Python,因为我不习惯仔细地缩进语句。在Ruby中也是这样吗?比如我可以这样写吗?iftoken=="hello"{puts"helloencountered"#lotsoflineshere}有没有办法使用大括号来做到这一点?我也阅读了有关block的内容,但不确定如何在if/else表达式中使用它们。 最佳答案 您不能使用大括号,但缩进也无所谓。Ruby使用end关键字代替右大括号。iftoken=="hello"puts"helloencountered"#lotsof

ruby - 我可以在 irb 中重复命令吗?

有没有一种简单的方法可以在Rubyirb中重复之前的命令?我希望有类似在Unix中使用感叹号(!)的东西。谢谢。 最佳答案 defrepeat_last_irbeval(IRB.CurrentContext.io.line(-2))end然后您可以在irb控制台中使用replat_last_irb来运行最后的输入。IRB.CurrentContext.io如下所示:ruby-1.9.3-p0:001>defhelloruby-1.9.3-p0:002?>end=>nilruby-1.9.3-p0:003>IRB.CurrentCon

ruby - 我可以在 Ruby 中出现异常时访问绑定(bind)吗

假设我有:begin2.timesdoa=11/0endrescueputs$!debuggerend在这个例子中,我想获取a的值。如果a在beginblock中初始化,那么我可以在救援时访问它。但是,在此示例中,a是block本地的。当我救援时,有没有办法在异常时刻获得绑定(bind)? 最佳答案 你不能在doblock中再放一个begin,rescueblock吗? 关于ruby-我可以在Ruby中出现异常时访问绑定(bind)吗,我们在StackOverflow上找到一个类似的问题

ruby-on-rails - Rails 3.2.11 突然需要重启到 'acknowledge' Controller 有什么变化吗?

标题说明了一切。请注意,这不是模型或初始值设定项的更改。我可以删除Controller中的一个实例变量(例如,@user),然后重新加载一个View,它会工作-直到我重新启动服务器,在这种情况下它会提示变量为nil。我正常工作,然后切换到一组完全不同的Controller和View上工作,现在它无缘无故地发生了。应用处于开发环境中。development.rb内容:Dashboard::Application.configuredoconfig.cache_classes=falseconfig.whiny_nils=trueconfig.consider_all_requests_l

ruby - Ruby 线程不能在写入时发生冲突吗?

在过去的C#和Java工作中,我习惯于这样的声明不是线程安全的:x+=y;但是,在与Ruby并行运行上述代码时,我未能观察到任何线程间的冲突。我读过Rubyautomaticallypreventsmultiplethreadsfromwritingtothesamedataconcurrently.这是真的?因此+=运算符在Ruby中是线程安全的吗? 最佳答案 好吧,这取决于您的实现和很多事情。在MRI中,有一个GVL(GiantVMLock)这样的东西,它控制哪个线程一次实际执行代码。你看,在MRI中,一次只有一个线程可以执行R

ruby-on-rails - 在 Ruby 中运行 eval 有安全的方法吗?

我们正在开发一种与Tropo具有类似要求的产品(参见https://github.com/tropo/tropo-samples/tree/master/ruby),允许用户编写一个ruby​​脚本,该脚本可以访问传入的一些函数和变量。但是,我们希望避免用户访问全局调用删除所有用户或终止程序。有没有办法用eval来完成这个? 最佳答案 这在很大程度上取决于您如何实现它,但请研究绑定(bind)与eval的使用。通过创建您自己的绑定(bind)并使用“安全”对象预加载它,您可以限制用户可以使用他的代码执行的操作。http://rdoc

ruby - 你能在渲染过程中将 ruby​​ 对象传递给 haml 吗?

我正在尝试创建一个haml模板,该模板使用我的ruby​​应用程序中的一些数据来填充一些内容。是否可以将参数传递给haml以使其正确呈现?以下是我获取haml模板并呈现它的方式:template=File.open('path/to/template.haml')html=Haml::Engine.new(template.read).render那么,是否可以将对象从本地Ruby脚本传递到模板文件中,以便正确呈现页面?或者,我可以让haml文件拉入对象吗?如果这不起作用,我唯一的其他想法是将模板构建为本地字符串,这对我来说似乎更乏味。那么,是否有一种不同的编码模式可以更有效地完成这项