小编And*_*imm的帖子

红宝石中哈希成语的哈希?

在Ruby中创建哈希哈希允许方便的两个(或更多)维度查找.但是,插入时必须始终检查散列中是否已存在第一个索引.例如:

h = Hash.new
h['x'] = Hash.new if not h.key?('x')
h['x']['y'] = value_to_insert
Run Code Online (Sandbox Code Playgroud)

最好在自动创建新哈希的情况下执行以下操作:

h = Hash.new
h['x']['y'] = value_to_insert
Run Code Online (Sandbox Code Playgroud)

类似地,当查找第一个索引尚不存在的值时,如果返回nil而不是接收"[]"错误的未定义方法,则更为可取.

looked_up_value = h['w']['z']
Run Code Online (Sandbox Code Playgroud)

可以创建一个具有此行为的Hash包装类,但是是否存在用于完成此任务的Ruby习惯用法?

ruby idioms hash-of-hashes

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

如何在不接受所有文本更改的情况下进行git接受模式更改?

我有一个相反的问题," 如何使Git忽略文件模式(chmod)更改? "我有一个文件,我已经更改了可执行权限,但也有一些文本更改,我想承诺前者但不承认后者.这可能与git有关吗?

(实际上,我做了一些文本更改,我想提交可执行权限更改,以及其他我不想提交)

更新:将文本更改取消暂存到文件,然后git add -p 再次执行并合并一些文本更改,以便将模式更改为暂存.(我的git版本是1.5.4.3)

git chmod

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

如何在Ruby中将实例变量设为私有?

有没有办法在ruby中使实例变量"私有"(C++或Java定义)?换句话说,我希望以下代码导致错误.

class Base
  def initialize()
    @x = 10
  end
end

class Derived < Base
  def x
    @x = 20
  end
end

d = Derived.new
Run Code Online (Sandbox Code Playgroud)

ruby instance-variables private-members

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

通过添加'print'语句进行调试的正确名称是什么

有许多方法可以进行调试,使用调试器就是其中之一,但对于谦虚,懒惰的程序员而言,简单的方法就是在代码中添加一堆打印语句.

 def foo(x):
     print 'Hey wow, we got to foo!', x

     ...

     print 'foo is returning:', bar
     return bar
Run Code Online (Sandbox Code Playgroud)

这种调试方式是否有正确的名称?

debugging printf-debugging

33
推荐指数
9
解决办法
1万
查看次数

在Ruby中,如何判断字符串是否不在数组中?

在Ruby中,如果字符串不在选项数组中,我将如何返回true?

# pseudo code
do_this if current_subdomain not_in ["www", "blog", "foo", "bar"]
Run Code Online (Sandbox Code Playgroud)

...或者你知道一个更好的方法吗?

ruby arrays

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

"影子"在Ruby中意味着什么?

如果我执行以下操作并在Ruby 1.9下打开警告:

$VERBOSE = true
x = 42
5.times{|x| puts x}
Run Code Online (Sandbox Code Playgroud)

我明白了

warning: shadowing outer local variable - x
Run Code Online (Sandbox Code Playgroud)

据推测,这与使用x作为块参数以及块外的变量有关,但"阴影"是什么意思?

ruby shadow

33
推荐指数
2
解决办法
8966
查看次数

有没有办法限制"git gc"使用的内存量?

我正在共享主机上托管一个git repo.我的repo必然有几个非常大的文件,每次我尝试在repo上运行"git gc"时,我的进程被共享主机提供程序杀死,因为使用了太多内存.有没有办法限制git gc可以消耗的内存量?我希望它可以交换内存使用速度,只需要花一点时间来完成它的工作.

memory git dreamhost git-gc

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

32
推荐指数
3
解决办法
9774
查看次数

在另一个模块中扩展Ruby模块,包括模块方法

每当我尝试扩展ruby模块时,我都会丢失模块方法.既不包含也不延伸都不会这样做.考虑一下片段:

module A 
  def self.say_hi
    puts "hi"
  end
end

module B 
  include A
end

B.say_hi  #undefined_method
Run Code Online (Sandbox Code Playgroud)

无论B包括还是扩展A,都不会定义say_hi.

有没有办法完成这样的事情?

ruby module

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

Ruby中没有命名参数?

这很简单,我不敢相信它抓住了我.

def meth(id, options = "options", scope = "scope")
  puts options
end

meth(1, scope = "meh")

-> "meh"
Run Code Online (Sandbox Code Playgroud)

我倾向于使用哈希作为参数选项,因为它是牧群的做法 - 它非常干净.我认为这是标准.今天,经过大约3个小时的寻找bug之后,我追踪到了一个错误,我碰巧正在使用这个假设命名参数将被尊重.他们不是.

所以,我的问题是:在Ruby(1.9.3)中,命名参数是否正式不受尊重,或者这是我缺少的一个副作用?如果他们不是,为什么不呢?

ruby parameters named-parameters

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