javascript

java

python

c#

android

node.js

reactjs

c++

php

html

jquery

css

git

.net

ios

ruby-on-rails

sql

c

string

ruby

如何在没有警告的情况下重新定义Ruby常量?

我正在运行一些Ruby代码,该代码每次更改日期都会对Ruby文件进行评估。 在文件中,我有常量定义,例如

Tau = 2 * Pi

并且,当然,它们使解释器每次都显示不想要的“已初始化常量”警告,因此,我希望具有以下功能:

def_if_not_defined(:Tau, 2 * Pi)
redef_without_warning(:Tau, 2 * Pi)

我可以这样写所有常量定义来避免警告:

Tau = 2 * Pi unless defined?(Tau)

但它很雅致,有点湿(不是干的)。

有没有更好的方法来def_if_not_defined? 又如何redef_without_warning

-

感谢史蒂夫的解决方案:

class Object
  def def_if_not_defined(const, value)
    mod = self.is_a?(Module) ? self : self.class
    mod.const_set(const, value) unless mod.const_defined?(const)
  end

  def redef_without_warning(const, value)
    mod = self.is_a?(Module) ? self : self.class
    mod.send(:remove_const, const) if mod.const_defined?(const)
    mod.const_set(const, value)
  end
end

A = 1
redef_without_warning :A, 2
fail 'unit test' unless A == 2
module M
  B = 10
  redef_without_warning :B, 20
end
fail 'unit test' unless M::B == 20

-

这个问题太老了。 上面的代码仅对于Ruby 1.8是必需的。 在Ruby 1.9中,P3t3rU5的答案不会产生任何警告,并且会更好。

trans by 2019-11-18T04:36:13Z

Ruby / Rails循环中的魔术首末指示符?

Ruby / Rails在用于基本事物的糖方面做很多很酷的事情,我认为有一个非常普遍的场景,我想知道是否有人为它做了帮助或类似的工作。

   a = Array.new(5, 1)

   a.each_with_index do |x, i|
     if i == 0
       print x+1
     elsif i == (a.length - 1)
       print x*10
     else
        print x
     end
   end

请原谅丑陋,但这达到了人们想要的目的……是否有一种红宝石方式可以对循环的第一和最后做某事?

[编辑]我认为理想情况下,这将是对具有参数(数组实例,所有元素功能,第一个元素功能,最后一个元素功能)的Array的扩展...但是我愿意接受其他想法。

trans by 2019-11-18T00:01:32Z

ruby-Rails-系统找不到指定的路径

我已经使用railsinstaller在Windows上安装了Rails和Ruby。 问题是,当我运行rails命令时,它给了我:“系统找不到指定的路径。”

我正在运行Windows 7 x64和Ruby 2.20。

我尝试卸载Rails并重新安装; 那没有帮助。 像ruby -v一样执行Ruby命令,但是rails -v=无法正常工作。

trans by 2019-11-17T22:08:16Z

了解Ruby的加载路径

我对为什么我的项目无法加载所需的文件感到有些困惑,这是一个非常简单的项目树:

processor/
  bin/
  lib/
    processor.rb
    processor/
      mapper.rb
      reducer.rb

我的2618630398573806806592文件看起来像

require 'processor/mapper'
require 'processor/reducer'

class Processor

end

为了测试它,文件映射器看起来像:

class Mapper
  def run
    puts "running map"
  end
end

但是运行ruby lib/processor.rb将导致:

<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- processor/mapper (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from lib/processor.rb:3:in `<class:Processor>'
    from lib/processor.rb:2:in `<main>'    
trans by 2019-11-17T19:51:02Z

红宝石-为什么__FILE__大写而__dir__小写?

在Ruby 2.0.0-p0中,引入了__dir__变量,以便于访问当前正在执行的文件的目录。

__FILE__是大写字母时,为什么__dir__是小写字母?

trans by 2019-11-17T17:37:11Z

如何在Ruby on Rails中以编程方式找到名称空间/模块名称?

如何在下面的过滤器中找到名称空间或模块“ Foo”的名称?

class ApplicationController < ActionController::Base
  def get_module_name
    @module_name = ???
  end
end


class Foo::BarController < ApplicationController
  before_filter :get_module_name
end
trans by 2019-11-17T16:01:36Z

ruby-将方法添加到实例obj

obj = SomeObject.new

def obj.new_method
  "do some things"
end

puts obj.new_method
> "do some things"

这样可以。 但是,我需要在现有方法中做同样的事情:

def some_random_method
  def obj.new_method
    "do some things"
  end
end

也可以正常工作,但是在方法内部有一个方法看起来非常可怕。 问题是,是否有其他替代方法添加这种方法?

trans by 2019-11-17T15:53:29Z

ruby-如何在Rails con中返回HTTP 204

这似乎很基本,但是我是Ruby / Rails的初学者。 我只需要在控制器中返回HTTP 204。将

respond_to do |format|
  format.html  
end

返回204?

trans by 2019-11-17T14:02:32Z

红宝石-命名一个以上单词的宝石时,应该使用破折号或下划线吗?

当宝石名称包含多个单词时,我对宝石命名约定感到困惑。

  • think-sphinx是gem的名称,但是此gem的基本* .rb文件是lib / thinking_sphinx.rb(下划线)

  • acts-as-taggable-on是gem的名称,基本* .rb文件称为lib / acts-as-taggable-on.rb(连字符)

  • factory_girl在gem名称和基本* .rb文件的名称中均使用下划线

是否使用下划线或连字符有关系吗? 这里有什么新兴共识吗?

trans by 2019-11-17T00:50:00Z

ruby on rails-以编程方式获取Resque队列中的作业数

我有兴趣设置一个监视服务,当Resque队列中的作业太多时,该服务将为我分页(我有大约6个队列,每个队列有不同的编号)。 我还想设置一个非常类似的监视服务,当我在队列中超过一定数量的失败作业时,它将提醒我。

我的问题是,我在Redis服务器上看到很多与Resque相关的键和混乱。 我不一定看到一种简单的方法来获取每个队列的作业数或失败的作业数。 当前是否有一种简单的方法来从Redis抓取这些数据?

trans by 2019-11-16T08:24:45Z

Ruby风格:如何检查是否存在嵌套的哈希元素

考虑存储在散列中的“人”。 两个示例是:

fred = {:person => {:name => "Fred", :spouse => "Wilma", :children => {:child => {:name => "Pebbles"}}}}
slate = {:person => {:name => "Mr. Slate", :spouse => "Mrs. Slate"}} 

如果“人”没有任何孩子,则“孩子”元素不存在。 因此,对于Slate先生,我们可以检查他是否有父母:

slate_has_children = !slate[:person][:children].nil?

因此,如果我们不知道“ slate”是“ person”哈希,该怎么办? 考虑:

dino = {:pet => {:name => "Dino"}}

我们不能再轻易地检查孩子了:

dino_has_children = !dino[:person][:children].nil?
NoMethodError: undefined method `[]' for nil:NilClass

因此,您将如何检查哈希的结构,特别是如果它嵌套得很深(甚至比此处提供的示例还深)的话? 也许更好的问题是:执行此操作的“ Ruby方法”是什么?

trans by 2019-11-16T05:56:46Z

路径-是否有较短的方法要求在ruby的同一目录中有文件?

是否有较短的方法要求文件位于同一目录(与正在执行的脚本相同)?

require File.expand_path(File.dirname(__FILE__) + '/some_other_script')

我读到requirerequire "./my_script"实际上会加载脚本两次(红宝石不会识别出它实际上是同一脚本),这就是为什么建议使用File.expand_path的原因:如果每次都需要使用该脚本,它将 只能加载一次。

在我看来,像Ruby这样的简洁语言似乎没有更短的解决方案,这很奇怪。 例如,python就是这样的:

import .some_other_module_in_the_same_directory

我想我可以猴子补丁require ...但是那简直是邪恶的! ;-)

trans by 2019-11-16T00:25:50Z

红宝石-“ if”语句与“ then”末尾有什么区别?

当我们将then放在if语句的末尾时,这两个Ruby if语句之间有什么区别?

if(val == "hi") then
  something.meth("hello")
else
  something.meth("right")
end

if(val == "hi")
  something.meth("hello")
else
  something.meth("right")
end
trans by 2019-11-15T14:51:56Z

浮点数-在Ruby中设置浮点数的显示精度

是否可以在Ruby中设置浮点数的显示精度?

就像是:

z = 1/3
z.to_s    #=> 0.33333333333333
z.to_s(3) #=> 0.333
z.to_s(5) #=> 0.33333

还是我必须重写Floatto_s方法?

trans by 2019-11-15T12:41:35Z

红宝石-将两个数组合并为哈希

我有两个数组:

members     = ["Matt Anderson", "Justin Biltonen", "Jordan Luff", "Jeremy London"]
instruments = ["guitar, vocals", "guitar", "bass", "drums"]

我想做的就是将这些结合起来,以便得到的数据结构像下面这样的哈希:

{"Matt Anderson"=>["guitar", "vocals"], "Justin Biltonen"=>"guitar", "Jordan Luff"=>"bass", "Jeremy London"=>"drums"}

请注意,“ Matt Anderson”的值现在是一个数组而不是字符串。 任何Ruby向导都愿意试一试吗?

我知道Hash[*members.zip(instruments).flatten]几乎以我想要的方式将它们组合在一起,但是首先将“吉他,人声”字符串转换为数组呢? 谢谢。

trans by 2019-11-15T06:51:49Z

Ruby:将字符串转换为d

在Ruby中,将2614900498817876976992格式的字符串转换为Date的最佳方法是什么?

trans by 2019-11-15T06:05:25Z

红宝石-Rails bundler不会在组内安装宝石

我在一个叫做:development的捆绑程序组中有很多宝石,包括ruby-debug。 当我运行bundle命令时,这些gems会被忽略,并且只会安装不在任何组中的gems。 如何确保捆绑程序不忽略:development组中的gems?

编辑:这就是我的Gemfile的样子。

source 'http://rubygems.org'
gem 'rails', '3.0.1'

# Auth gems
gem "devise", "1.1.3"
gem "omniauth"

# Bundle Mongoid gems
gem "mongoid", "2.0.0.beta.19"
gem "bson_ext"

# Asset gems
gem 'jquery-rails'
gem "jammit"

# Controller gems
gem 'inherited_resources', '1.1.2'

# View gems
gem 'haml'
gem 'formtastic', '~> 1.1.0'

# Nokogiri
gem "mechanize"
gem "json"


group :development do
  gem "ruby-debug"
  gem 'compass'
  gem 'compass-colors'
  gem 'pickler'
  gem 'haml-rails'
  gem 'rails3-generators'
  gem "hpricot"
  gem "ruby_parser"
  gem 'fog'
end
trans by 2019-11-14T20:14:10Z

如何在Rails外部的ruby脚本中使用ActiveRecord?

我有一个小的ruby脚本,我想在其中使用ActiveRecord轻松访问数据库模型。 最好的方法是什么?

trans by 2019-11-14T08:59:11Z

红宝石-检查哈希的键是否包含所有键集

我正在寻找更好的方法

if hash.key? :a &&
   hash.key? :b &&
   hash.key? :c &&
   hash.key? :d

最好是这样的

hash.includes_keys? [ :a, :b, :c, :d ] 

我想出了

hash.keys & [:a, :b, :c, :d] == [:a, :b, :c, :d]

但我不喜欢不得不两次添加数组

trans by 2019-11-14T06:37:26Z

红宝石-Rails 3-没有要加载的文件-openssl

运行Rails服务器时,出现以下错误:没有这样的文件要加载-openssl

我尝试在网上找到的解决方案。 我去〜/ .rvm / src / ruby-1.9.2-head / ext / openssl。 我输入:ruby extconf.rb,但是得到以下信息:

=== OpenSSL for Ruby configurator ===
=== Checking for system dependent stuff... ===
checking for t_open() in -lnsl... no
checking for socket() in -lsocket... no
checking for assert.h... yes
=== Checking for required stuff... ===
checking for openssl/ssl.h... no
=== Checking for required stuff failed. ===
Makefile wasn't created. Fix the errors above.

我无法使用make或make install。

trans by 2019-11-14T04:09:30Z

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 下一页 共60页