如何强制子类在Ruby中实现方法.在Ruby中似乎没有一个抽象关键字,这是我在Java中采用的方法.还有另外一种类似Ruby的方法来强制抽象吗?
当重新定义类方法时,我希望能够调用 super,就像在实例方法中一样。
例如,我有一个带有类方法的类 hiHi.hi
class Hi
def self.hi
puts "hi"
end
end
Hi.hi #=> "hi"
Run Code Online (Sandbox Code Playgroud)
现在,可以说我想重新定义self.hi
class Hi
def self.hi
super
puts "Oh!"
end
end
Hi.hi #=> NoMethodError: super: no superclass method `hi' for Hi:Class
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?
我知道我可以使用别名获得相同的功能(如下所示),但这似乎没有必要。
class Hi
class << self
def new_hi
old_hi
puts "Oh!"
end
alias :old_hi :hi
alias :hi :new_hi
end
end
Hi.hi #=> "hi\n Oh!"
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?
假设我们在这里有一个嵌套哈希.
a = {:"0" => {:CA => {:count => 10}}}
Run Code Online (Sandbox Code Playgroud)
如果我们想要为该哈希添加新的哈希对,比如说
a = {:"0" => {:NY => {:count => 11}}}
Run Code Online (Sandbox Code Playgroud)
让它成为
a = {:"0" => {:CA => {:count =>10}, :NY => {:count => 11}}}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我试过了
a[:0][:NY][:count] = 11
Run Code Online (Sandbox Code Playgroud)
但得到错误"undefined method` [] ='为nil:NilClass(NoMethodError)"
我想我很忙,但是无论如何都可以撤消 git am --abort
我正在使用,am并且存在一些冲突(如预期的那样),所以我解决了这些冲突,但是git am --continue我没有像往常那样简单地提交。然后,当我稍后回来时,我注意到我仍处于上午模式,但git am --skip我没有这样做git am --abort,现在我的提交已消失。
我当然可以再次执行该过程,但是我不想再次执行冲突解决。
编辑:我解决了我的特定问题,但我仍然好奇是否存在更强大的解决方案。即撤消中止,即使补丁已久了。
我正在设置一个自定义查询,它使用一系列OR语句和BETWEEN语句以及最后一个GROUP BY id HAVING COUNT(*)> =#{tolerance}.更不用说INNER和LEFT加入操作了.
我认为不可能使用活动记录进行设置.所以我使用Model.connection.select_all()命令来触发查询.这有效,但是如何不将所有行映射到该特定模型?
我已经离开红宝石一段时间了,我注意到1.9.3中有一些非常奇怪的东西(至少对我而言).也许有人可以向我解释.
我试图把一个字符串分成几行,所以我做了string.split('\n'),但这给了我地狱.
最终我将问题追溯到使用单引号而不是双引号.那是string.split("\n")
在追踪这个过程中,我注意到了一些事情
'\n'.ord == 92"\n".ord == 10'\'.ord 是无效的红宝石'\\'.ord == 92我唯一的理论是单引号导致ruby不解析字符串,因此\n视为两个字符.但是,如果是这种情况,为什么不'\'通过处理器?
我错过了什么吗?为什么不拆分将字符串转换为正确的ascii?
PS这里有一些测试代码来说明我的观点
"asdf\nasdf".split('\n').size #=> 1
"asdf\nasdf".split("\n").size #=> 2
Run Code Online (Sandbox Code Playgroud) 我为ruby编写了一个bash包装器,它经历了各种设置步骤.
最基本的版本是,
#!/bin/bash
# ruby_wrapper.sh
ruby
Run Code Online (Sandbox Code Playgroud)
现在我希望能够像常规红宝石一样使用这个包装器!具体来说,我想创建一个使用这个"解释器"的.rb文件.
#!/path/to/ruby_wrapper.sh
# my_file.rb
puts "hello world"
Run Code Online (Sandbox Code Playgroud)
所以我希望能够$ ./my_file.rb而不是$ ruby_wrapper.sh my_file.rb
这可能吗?
该文件称事实并非如此.
请注意,解释器本身可能不是解释器脚本.
但我不明白为什么不.有没有人有任何想法来解决这个问题?
我有一个项目,有一个非常简单的目录结构,如此,
--Top
--Child
CMakeLists.txt
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
我想要做的是在Top/CMakeLists.txt中定义一个宏,然后在Child/CMakeLists.txt中使用它.
做这个的最好方式是什么?
如有必要,我可以链接我的确切列表,但顶级列表包含,
...
include_directories (Sequences)
add_subdirectory (Sequences)
macro( ... )
endmacro( ... )
Run Code Online (Sandbox Code Playgroud)
无论我做什么,似乎我定义的宏只有本地范围,文档不是很清楚.