小编And*_*imm的帖子

使用Ruby将大写字符串转换为title-case

我正在尝试将Ruby中的全大写字符串转换为小写字符串,但每个单词的第一个字符都是大写字母.例:

将"我的绳索"转换为"我的弦在这里".

我知道我可以使用.downcase方法,但这会使一切都小写("我的字符串在这里").我正在扫描文件中的所有行并进行此更改,那么是否有正则表达式我可以通过ruby来实现此目的?

谢谢!

ruby string

49
推荐指数
5
解决办法
4万
查看次数

了解Ruby中的私有方法

class Example
 private
 def example_test
  puts 'Hello'
 end
end

e = Example.new
e.example_test
Run Code Online (Sandbox Code Playgroud)

这当然是行不通的,因为我们指定了Example(e)的显式接收器 - 实例,这是针对"私有规则"的.

但我无法理解,为什么人们不能在Ruby中做到这一点:

class Foo
 def public_m
  self.private_m # <=
 end
 private
 def private_m
  puts 'Hello'
 end
end

Foo.new.public_m
Run Code Online (Sandbox Code Playgroud)

public_m方法定义(即self)中的当前对象是Foo的实例.那么为什么不允许呢?为了解决这个问题,我必须self.private_m改为公正private_m.但为什么这个不同,是不是selfFoo里面的一个例子public_m?谁是裸字private_m呼叫的接收者?不是self- 实际上你省略了什么,因为Ruby会为你做这件事(会在self上调用private_m)吗?

我希望我没有太多混淆,我对Ruby仍然很新鲜.


编辑:谢谢你的所有答案.把它们放在一起我能(最终)神交明显的(而不是一个人,谁从来没有见过的东西,比如Ruby那么明显):这self本身可以是显性和隐性的接收器,并且赚取差价.因此,有两条规则,如果你要调用一个私有方法:self必须是隐式接收器,以及自我必须是当前类的一个实例(Example在这种情况下-而且,只有当自己好像里面实例方法的定义,在此期间发生方法执行).如果我错了,请纠正我.

class Example 

 # self as an explicit receiver (will throw an error)
 def explicit 
  self.some_private_method
 end

 # self as an …
Run Code Online (Sandbox Code Playgroud)

ruby access-specifier

49
推荐指数
3
解决办法
4万
查看次数

ruby中的常量或类变量?

我已经在Ruby中编程了几个月了,我想知道什么时候使用常量而不是类变量,反之亦然.(我在Rails工作,考虑模型中的常量).

class Category
  TYPES = %w(listing event business).freeze
end
Run Code Online (Sandbox Code Playgroud)

要么

class Category
  @@types = %w(listing event business).freeze
  cattr_reader :types
end
Run Code Online (Sandbox Code Playgroud)

是否存在一种优于另一种情况的情况?或者只是品味/风格问题?

ruby constants class-variables

48
推荐指数
3
解决办法
2万
查看次数

Ruby中的Undefine变量

假设我正在使用irb,并输入a = 5.如何删除定义,a以便键入a返回NameError

一些背景:后来我想这样做:

context = Proc.new{}.binding
context.eval 'a = 5'
context.eval 'undef a'  # though this doesn't work.
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming local-variables

47
推荐指数
3
解决办法
2万
查看次数

运行规范时禁止Ruby警告

当我运行我的规格时,我正在寻找一种方法来抑制Ruby警告.

spec spec/models/account_spec.rb
Run Code Online (Sandbox Code Playgroud)

我收到警告,例如:

DEPRECATION WARNING: ActiveSupport::Dependencies.load_paths is deprecated, ...
warning: already initialized constant SOME_CONSTANT_NAME
Run Code Online (Sandbox Code Playgroud)

删除ActiveSupport警告很容易ActiveSupport::Deprecation.silenced = true.

作为spec命令的一部分,如何防止已初始化的常量警告?或者通过创建另一个spec可以抑制此类警告的文件.请记住,这些警告来自gem文件,因此我无法进入这些文件并将其包围起来Kernel.silence_warnings.

注意: 我知道抑制警告很糟糕.但是,当我spec从内部运行单个内容时,vim如果警告不会使我的屏幕混乱,那将会很好.

ruby vim warnings rspec ruby-on-rails

46
推荐指数
7
解决办法
4万
查看次数

Ruby Array限制方法

我想限制一个Array对象.这怎么可能与红宝石

['one','two','three'].limit(2) => ['one','two']
Run Code Online (Sandbox Code Playgroud)

谢谢你的快速帮助!

ruby arrays

45
推荐指数
3
解决办法
3万
查看次数

如何设置方法测试中使用的私有实例变量?

给定一个带有几个实例变量和一些方法的类.一些实例变量可通过attr_reader和设置访问attr_accessor.因此其他人是私人的.
某些私有实例变量在其中一个实例方法中设置,并在另一个方法中读取/使用.

为了测试我正在使用RSpec.由于我还是Ruby的新手,并且想要把所有事情都搞定,我将我的测试定义得相当精细.因此,我describe为每个实例方法都有一个块,它们本身被划分为contexts和its 的子集.一般环境先决条件定义为before.

但是,当测试其中一个方法,即使用但未设置其中一个私有变量时,我需要调用另一个方法,即设置此变量.这似乎相当超重,对我来说不是模块化的.

有没有办法强制私有实例变量到某个值.类似于" 剥离 "私有实例变量的值Object::instance_eval(:var).

ruby testing rspec access-specifier

45
推荐指数
2
解决办法
4万
查看次数

如何临时禁用Rack-Mini-Profiler?

我在rails中使用机架迷你探测器就好了,但在某些编码会话期间,特别是在我正在处理许多不同的客户端代码时,它会妨碍我.(主要在我的客户端调试工具网络图等)

我试图用一个前置过滤器将其关闭,这也可以用来查看用户是否有权查看该配置文件,但"取消授权"似乎对我没有任何作用.这是我的代码称为前置过滤器:

def miniprofiler  
 off = true
 if off || !current_user
  Rack::MiniProfiler.deauthorize_request
  return
 elsif current_user.role_symbols.include?(:view_page_profiles)    
  Rack::MiniProfiler.authorize_request
  return
 end
 Rack::MiniProfiler.deauthorize_request
end
Run Code Online (Sandbox Code Playgroud)

我也知道有一个设置"Rack :: MiniProfiler.config.authorization_mode",但我找不到可能的设置是什么的文档,而不是在代码中看到它?现在它告诉我:allow_all,但是:allow_none也没有做任何事情.

即使我可以在开发环境文件中临时设置一个值并重新启动服务器,这也符合我的目的.

ruby-on-rails ruby-on-rails-3 rack-mini-profiler

45
推荐指数
2
解决办法
1万
查看次数

确定散列数组中是否存在值

我有以下内容:

array_of_hashes = [{:a=>10, :b=>20}, {:a=>11, :b=>21}, {:a=>13, :b=>23}]
Run Code Online (Sandbox Code Playgroud)

如何查找是否:a=>11存在array_of_hashes

array_of_hashes.include? 似乎不起作用

ruby arrays

44
推荐指数
2
解决办法
2万
查看次数

如何撤消捆绑更新

bundle update并且bundle install很棒.但是,有什么好方法undo bundle install,bundle update如果出现问题?

ruby-on-rails bundler rvm

44
推荐指数
2
解决办法
1万
查看次数