小编ndn*_*kov的帖子

Ruby:等待使用join和ThreadsWait.all_waits完成的所有线程 - 有什么区别?

请考虑以下示例:

threads = []

(0..10).each do |_|
  threads << Thread.new do
    # do async staff there
    sleep Random.rand(10)
  end
end
Run Code Online (Sandbox Code Playgroud)

然后有2种方法可以在完成时等待:

  1. 使用join:

    threads.each(&:join)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用ThreadsWait:

    ThreadsWait.all_waits(threads)
    
    Run Code Online (Sandbox Code Playgroud)

这两种方式之间有什么区别吗?

我知道这个ThreadsWait课有其他有用的方法.并特别询问all_waits方法.

ruby multithreading thread-safety

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

CSV 文件中的重复标头

我尝试使用 ruby​​ csv lib 解析 csv 文件,但该文件有两列具有相同的标题文本。是否可以访问列:column,即row[:column_1]row[:column_2]row[:column][0]row[:column][1]或我应该使用索引来访问它?

谢谢

ruby csv

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

::运算符如何在Ruby中工作?

我是Ruby的新手,对::运营商感到困惑.为什么以下代码输出2,3,4,5,1而不仅仅输出1?谢谢!

class C
  a = 5
  module M
    a = 4
    module N
      a = 3
      class D
        a = 2
        def show_a
          a = 1
          puts a
        end
        puts a
      end
      puts a
    end
    puts a
  end
  puts a
end



d = C::M::N::D.new
d.show_a
Run Code Online (Sandbox Code Playgroud)

ruby syntax constants

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

#之间?Cooper的错误或异常*开始Ruby*

在Cooper的书" Beginning Ruby"中,第166页有一个我无法再现的例子.

class Song
  include Comparable

  attr_accessor :length
  def <=>(other)
    @length <=> other.length
  end

  def initialize(song_name, length)
    @song_name = song_name
    @length = length
  end
end

a = Song.new('Rock around the clock', 143)
b = Song.new('Bohemian Rhapsody', 544)
c = Song.new('Minute Waltz', 60)

a.between?(b, c)
Run Code Online (Sandbox Code Playgroud)

在书中,它说结果应该是=> true在我得到的时候=> false.

我接着把它分解为......

puts 143.between?(544, 60) # => false
puts 143.between?(60, 544) # => true
Run Code Online (Sandbox Code Playgroud)

根据ruby-doc.org,它应该被写成between?(min,max)- 这让我相信

  • a)这本书有错误
  • b)在Ruby的早期版本之间?更加灵活和允许(max,min)
  • c)这个例子在某种程度上是异常的,我错过了一些东西

这是什么?

ruby

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

大O表示法在2 ^ n或n ^ 2中的主导项是什么

我一直在查看Big O表示法,并且遇到了可操作的问题2^n+n^2。我知道大O表示法的做法是删除常数和低阶项,但是我不知道该作哪个O(n)。我认为可能是,2^n但是没有运气找到任何暗示这一点的机会。

big-o

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

当前的Ruby方法是通过super调用的吗?

在运行时的方法中,有没有办法知道是否已super在子类中调用该方法?例如

module SuperDetector
  def via_super?
    # what goes here?
  end
end

class Foo
  include SuperDetector

  def bar
    via_super? ? 'super!' : 'nothing special'
  end
end

class Fu < Foo
  def bar
    super
  end
end

Foo.new.bar # => "nothing special"
Fu.new.bar  # => "super!"
Run Code Online (Sandbox Code Playgroud)

我怎么写via_super?,或者,如果有必要的话via_super?(:bar)

ruby metaprogramming subclass super ruby-2.3

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

正则表达式 仅匹配 0-39 的罗马数字

我正在尝试编写一个仅匹配从 0 到 39 的罗马数字的正则表达式。有很多例子可以匹配更大的罗马数字,但我不知道如何匹配这个特定的子集。

regex

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

一元Ampersand运算符并在Ruby中传递proc作为参数

我无法理解下面的代码.

我得到了Unary Ampersand运算符的概念,并将procs作为方法的参数传递.但我真的无法绕过self去往language.call.我这样理解:我们self作为一个参数传递给proc/block语言.这对我没有任何意义.有人可以解释一下吗?:)

class Translator    
  def speak &language
    language.call(self)    
  end

  protected

  def french
    'bon jour'  
  end

  def spanish
    'hola'   
  end

  def turkey
    'gobble'   
  end

  def method_missing(*args)
    'awkward silence'
  end 
end
Run Code Online (Sandbox Code Playgroud)

我们正在使用它:

translator.speak(&:spanish)
Run Code Online (Sandbox Code Playgroud)

ruby

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

将方法别名为单个对象

我正在尝试定义单例别名方法.如:

name = 'Bob'
# I want something similar to this to work
name.define_singleton_method(:add_cuteness, :+)
name = name.add_cuteness 'by'
Run Code Online (Sandbox Code Playgroud)

我确信我可以将方法对象作为第二个参数传递.

我不想这样做

name.define_singleton_method(:add_cuteness) { |val| self + val }
Run Code Online (Sandbox Code Playgroud)

我想别名String#+方法不使用它.强调别名,但将实际方法对象作为第二个参数发送也很酷.

ruby metaprogramming singleton-methods pointer-aliasing

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

gsub删除第一个逗号之前的所有内容

我有这个字符串:

auteur = "comte de Flandre et Hainaut, Baudouin, Jacques, Thierry"
Run Code Online (Sandbox Code Playgroud)

我想在第一个逗号之前删除所有内容,即在这种情况下保留"Baudouin,Jacques,Thierry"

试过这个:

nom = auteur.gsub(/.*,/, '')
Run Code Online (Sandbox Code Playgroud)

但是在最后一个逗号之前删除了所有内容并且只保留了"Thierry".

ruby regex gsub

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