小编die*_*mes的帖子

Ruby中的抽象方法

如何强制子类在Ruby中实现方法.在Ruby中似乎没有一个抽象关键字,这是我在Java中采用的方法.还有另外一种类似Ruby的方法来强制抽象吗?

ruby abstract

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

从类方法调用 super

当重新定义类方法时,我希望能够调用 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)

有一个更好的方法吗?

ruby

5
推荐指数
1
解决办法
4573
查看次数

ruby将新的键值对添加到嵌套哈希

假设我们在这里有一个嵌套哈希.

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)"

ruby hash ruby-on-rails

5
推荐指数
2
解决办法
9353
查看次数

撤消git am --abort

我想我很忙,但是无论如何都可以撤消 git am --abort

我正在使用,am并且存在一些冲突(如预期的那样),所以我解决了这些冲突,但是git am --continue我没有像往常那样简单地提交。然后,当我稍后回来时,我注意到我仍处于上午模式,但git am --skip我没有这样做git am --abort,现在我的提交已消失。

我当然可以再次执行该过程,但是我不想再次执行冲突解决。

编辑:我解决了我的特定问题,但我仍然好奇是否存在更强大的解决方案。即撤消中止,即使补丁已久了。

git

5
推荐指数
1
解决办法
2990
查看次数

将Rails自定义SQL查询映射到ActiveRecord模型

我正在设置一个自定义查询,它使用一系列OR语句和BETWEEN语句以及最后一个GROUP BY id HAVING COUNT(*)> =#{tolerance}.更不用说INNER和LEFT加入操作了.

我认为不可能使用活动记录进行设置.所以我使用Model.connection.select_all()命令来触发查询.这有效,但是如何不将所有行映射到该特定模型?

activerecord ruby-on-rails

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

"\n"与'\n'的奇怪之处

我已经离开红宝石一段时间了,我注意到1.9.3中有一些非常奇怪的东西(至少对我而言).也许有人可以向我解释.

我试图把一个字符串分成几行,所以我做了string.split('\n'),但这给了我地狱.

最终我将问题追溯到使用单引号而不是双引号.那是string.split("\n")

在追踪这个过程中,我注意到了一些事情

  1. '\n'.ord == 92
  2. "\n".ord == 10
  3. '\'.ord 是无效的红宝石
  4. '\\'.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 string

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

在bash中编写脚本解释器

我为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

这可能吗?

文件称事实并非如此.

请注意,解释器本身可能不是解释器脚本.

但我不明白为什么不.有没有人有任何想法来解决这个问题?

unix linux bash netbsd

1
推荐指数
1
解决办法
818
查看次数

通过CMakeLists在Cmake中编写宏

我有一个项目,有一个非常简单的目录结构,如此,

--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)

无论我做什么,似乎我定义的宏只有本地范围,文档不是很清楚.

cmake

1
推荐指数
1
解决办法
364
查看次数

标签 统计

ruby ×4

ruby-on-rails ×2

abstract ×1

activerecord ×1

bash ×1

cmake ×1

git ×1

hash ×1

linux ×1

netbsd ×1

string ×1

unix ×1