我正在尝试将Ruby中的全大写字符串转换为小写字符串,但每个单词的第一个字符都是大写字母.例:
将"我的绳索"转换为"我的弦在这里".
我知道我可以使用.downcase方法,但这会使一切都小写("我的字符串在这里").我正在扫描文件中的所有行并进行此更改,那么是否有正则表达式我可以通过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中编程了几个月了,我想知道什么时候使用常量而不是类变量,反之亦然.(我在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)
是否存在一种优于另一种情况的情况?或者只是品味/风格问题?
假设我正在使用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警告.
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如果警告不会使我的屏幕混乱,那将会很好.
我想限制一个Array对象.这怎么可能与红宝石
['one','two','three'].limit(2) => ['one','two']
Run Code Online (Sandbox Code Playgroud)
谢谢你的快速帮助!
给定一个带有几个实例变量和一些方法的类.一些实例变量可通过attr_reader和设置访问attr_accessor.因此其他人是私人的.
某些私有实例变量在其中一个实例方法中设置,并在另一个方法中读取/使用.
为了测试我正在使用RSpec.由于我还是Ruby的新手,并且想要把所有事情都搞定,我将我的测试定义得相当精细.因此,我describe为每个实例方法都有一个块,它们本身被划分为contexts和its 的子集.一般环境先决条件定义为before.
但是,当测试其中一个方法,即使用但未设置其中一个私有变量时,我需要调用另一个方法,即设置此变量.这似乎相当超重,对我来说不是模块化的.
有没有办法强制私有实例变量到某个值.类似于" 剥离 "私有实例变量的值Object::instance_eval(:var).
我在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也没有做任何事情.
即使我可以在开发环境文件中临时设置一个值并重新启动服务器,这也符合我的目的.
我有以下内容:
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? 似乎不起作用
bundle update并且bundle install很棒.但是,有什么好方法undo bundle install,bundle update如果出现问题?