Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何解决在Ruby中调用函数的问题?_Ruby_Algorithm_Require - Fatal编程技术网

如何解决在Ruby中调用函数的问题?

如何解决在Ruby中调用函数的问题?,ruby,algorithm,require,Ruby,Algorithm,Require,我正在尝试使用我在Github中找到的一些ruby代码。我已经下载了代码并进行了必要的导入“requires”,并尝试按照github存储库上自述文件中的描述运行它。代码如下: require './pcset.rb' require 'test/unit' # # When possible, test cases are adapted from # Introduction to Post-Tonal Theory by Joseph N. Straus, # unless obvio

我正在尝试使用我在Github中找到的一些ruby代码。我已经下载了代码并进行了必要的导入“requires”,并尝试按照github存储库上自述文件中的描述运行它。代码如下:

require './pcset.rb'
require 'test/unit'

#
# When possible, test cases are adapted from 
# Introduction to Post-Tonal Theory by Joseph N. Straus,
# unless obvious or otherwise noted.
#

class PCSetTest < Test::Unit::TestCase
  def test_init
    #assert_raise(ArgumentError) {PCSet.new []}
    assert_raise(ArgumentError) {PCSet.new [1, 2, 3, 'string']}
    assert_raise(ArgumentError) {PCSet.new "string"}
    assert_raise(ArgumentError) {PCSet.new [1, 2, 3.6, 4]}
    assert_equal([0, 1, 2, 9], PCSet.new([0, 1, 2, 33, 13]).pitches)
    assert_equal([3, 2, 1, 11, 10, 0], PCSet.new_from_string('321bac').pitches)
    assert_equal([0,2,4,5,7,11,9], PCSet.new([12,2,4,5,7,11,9]).pitches)
    assert_nothing_raised() {PCSet.new []}
  end

  def test_inversion

  end

  def test_transposition

  end

  def test_multiplication

  end

  #
  # set                   normal                 prime                 forte #
  # 0,2,4,7,8,11          7,8,11,0,2,4           0,1,4,5,7,9           6-31
  # 0,1,2,4,5,7,11        11,0,1,2,4,5,7         0,1,2,3,5,6,8         7-Z36
  # 0,1,3,5,6,7,9,10,11   5,6,7,9,10,11,0,1,3    0,1,2,3,4,6,7,8,10    9-8
  #

  def test_normal_form
    testPC = PCSet.new [0,4,8,9,11]
    assert_kind_of(PCSet, testPC.normal_form)
    assert_equal([8,9,11,0,4], testPC.normal_form.pitches)
    assert_equal([10,1,4,6], PCSet.new([1,6,4,10]).normal_form.pitches)
    assert_equal([2,4,8,10], PCSet.new([10,8,4,2]).normal_form.pitches)
    assert_equal([7,8,11,0,2,4], PCSet.new([0,2,4,7,8,11]).normal_form.pitches)
    assert_equal([11,0,1,2,4,5,7], PCSet.new([0,1,2,4,5,7,11]).normal_form.pitches)
    assert_equal([5,6,7,9,10,11,0,1,3], PCSet.new([0,1,3,5,6,7,9,10,11]).normal_form.pitches)  
  end

  def test_prime_form
    assert_equal([0,1,2,6], PCSet.new([5,6,1,7]).prime.pitches)
    assert_equal([0,1,4], PCSet.new([2,5,6]).prime.pitches)
    assert_equal([0,1,4,5,7,9], PCSet.new([0,2,4,7,8,11]).prime.pitches)
    assert_equal([0,1,2,3,5,6,8], PCSet.new([0,1,2,4,5,7,11]).prime.pitches)
    assert_equal([0,1,2,3,4,6,7,8,10], PCSet.new([0,1,3,5,6,7,9,10,11]).prime.pitches)
  end

  def test_set_class
    testPcs = PCSet.new([2,5,6])
    testPrime = testPcs.prime
    assert_equal([
        [2,5,6], [3,6,7], [4,7,8], [5,8,9], [6,9,10], [7,10,11],
        [8,11,0],[9,0,1], [10,1,2],[11,2,3],[0,3,4],  [1,4,5],
        [6,7,10],[7,8,11],[8,9,0], [9,10,1],[10,11,2],[11,0,3],
        [0,1,4], [1,2,5], [2,3,6], [3,4,7], [4,5,8],  [5,6,9]
      ].sort, PCSet.new([2,5,6]).set_class.map{|x| x.pitches})
    assert_equal(testPcs.set_class.map{|x| x.pitches}, testPrime.set_class.map{|x| x.pitches})
  end

  def test_interval_vector
    assert_equal([2,1,2,1,0,0], PCSet.new([0,1,3,4]).interval_vector)
    assert_equal([2,5,4,3,6,1], PCSet.new([0,1,3,5,6,8,10]).interval_vector)
    assert_equal([0,6,0,6,0,3], PCSet.new([0,2,4,6,8,10]).interval_vector)
  end

  def test_complement
    assert_equal([6,7,8,9,10,11], PCSet.new([0,1,2,3,4,5]).complement.pitches)
    assert_equal([3,4,5], PCSet.new([0,1,2], 6).complement.pitches)
  end

  #
  # Test values from (Morris 1991), pages 105-111
  # Citation:
  # Morris. Class Notes for Atonal Music Theory
  # Lebanon, NH. Frog Peak Music, 1991.
  #
  def test_invariance_vector
    assert_equal([1,0,0,0,5,6,5,5],PCSet.new([0,2,5]).invariance_vector)
    assert_equal([2,2,2,2,6,6,6,6],PCSet.new([0,1,6,7]).invariance_vector)
    assert_equal([6,6,6,6,6,6,6,6],PCSet.new([0,2,4,6,8,10]).invariance_vector)
    assert_equal([1,0,0,0,0,0,0,0],PCSet.new([0,1,2,3,4,5,8]).invariance_vector)
    assert_equal([1,0,0,1,0,0,0,0],PCSet.new([0,1,2,3,5,6,8]).invariance_vector)
    assert_equal([12,12,12,12,0,0,0,0],PCSet.new([0,1,2,3,4,5,6,7,8,9,10,11]).invariance_vector)
  end

  #
  # Test values from (Huron 1994). Huron rounds, thus the 0.01 margin of error.
  # Citation:
  # Huron. Interval-Class Content in Equally Tempered Pitch-Class Sets: 
  # Common Scales Exhibit Optimum Tonal Consonance. 
  # Music Perception (1994) vol. 11 (3) pp. 289-305
  #
  def test_huron
    h1 = PCSet.new([0,1,2,3,4,5,6,7,8,9,10,11]).huron
    assert_in_delta(-0.2, h1[0], 0.01)
    assert_in_delta(0.21, h1[1], 0.01)
    h2 = PCSet.new([0,2,4,5,7,9,11]).huron
    assert_in_delta(4.76, h2[0], 0.01)
    assert_in_delta(0.62, h2[1], 0.01)
  end

  def test_coherence

  end
end
在文件
pcset\u test.rb
中,代码如下:

require './pcset.rb'
require 'test/unit'

#
# When possible, test cases are adapted from 
# Introduction to Post-Tonal Theory by Joseph N. Straus,
# unless obvious or otherwise noted.
#

class PCSetTest < Test::Unit::TestCase
  def test_init
    #assert_raise(ArgumentError) {PCSet.new []}
    assert_raise(ArgumentError) {PCSet.new [1, 2, 3, 'string']}
    assert_raise(ArgumentError) {PCSet.new "string"}
    assert_raise(ArgumentError) {PCSet.new [1, 2, 3.6, 4]}
    assert_equal([0, 1, 2, 9], PCSet.new([0, 1, 2, 33, 13]).pitches)
    assert_equal([3, 2, 1, 11, 10, 0], PCSet.new_from_string('321bac').pitches)
    assert_equal([0,2,4,5,7,11,9], PCSet.new([12,2,4,5,7,11,9]).pitches)
    assert_nothing_raised() {PCSet.new []}
  end

  def test_inversion

  end

  def test_transposition

  end

  def test_multiplication

  end

  #
  # set                   normal                 prime                 forte #
  # 0,2,4,7,8,11          7,8,11,0,2,4           0,1,4,5,7,9           6-31
  # 0,1,2,4,5,7,11        11,0,1,2,4,5,7         0,1,2,3,5,6,8         7-Z36
  # 0,1,3,5,6,7,9,10,11   5,6,7,9,10,11,0,1,3    0,1,2,3,4,6,7,8,10    9-8
  #

  def test_normal_form
    testPC = PCSet.new [0,4,8,9,11]
    assert_kind_of(PCSet, testPC.normal_form)
    assert_equal([8,9,11,0,4], testPC.normal_form.pitches)
    assert_equal([10,1,4,6], PCSet.new([1,6,4,10]).normal_form.pitches)
    assert_equal([2,4,8,10], PCSet.new([10,8,4,2]).normal_form.pitches)
    assert_equal([7,8,11,0,2,4], PCSet.new([0,2,4,7,8,11]).normal_form.pitches)
    assert_equal([11,0,1,2,4,5,7], PCSet.new([0,1,2,4,5,7,11]).normal_form.pitches)
    assert_equal([5,6,7,9,10,11,0,1,3], PCSet.new([0,1,3,5,6,7,9,10,11]).normal_form.pitches)  
  end

  def test_prime_form
    assert_equal([0,1,2,6], PCSet.new([5,6,1,7]).prime.pitches)
    assert_equal([0,1,4], PCSet.new([2,5,6]).prime.pitches)
    assert_equal([0,1,4,5,7,9], PCSet.new([0,2,4,7,8,11]).prime.pitches)
    assert_equal([0,1,2,3,5,6,8], PCSet.new([0,1,2,4,5,7,11]).prime.pitches)
    assert_equal([0,1,2,3,4,6,7,8,10], PCSet.new([0,1,3,5,6,7,9,10,11]).prime.pitches)
  end

  def test_set_class
    testPcs = PCSet.new([2,5,6])
    testPrime = testPcs.prime
    assert_equal([
        [2,5,6], [3,6,7], [4,7,8], [5,8,9], [6,9,10], [7,10,11],
        [8,11,0],[9,0,1], [10,1,2],[11,2,3],[0,3,4],  [1,4,5],
        [6,7,10],[7,8,11],[8,9,0], [9,10,1],[10,11,2],[11,0,3],
        [0,1,4], [1,2,5], [2,3,6], [3,4,7], [4,5,8],  [5,6,9]
      ].sort, PCSet.new([2,5,6]).set_class.map{|x| x.pitches})
    assert_equal(testPcs.set_class.map{|x| x.pitches}, testPrime.set_class.map{|x| x.pitches})
  end

  def test_interval_vector
    assert_equal([2,1,2,1,0,0], PCSet.new([0,1,3,4]).interval_vector)
    assert_equal([2,5,4,3,6,1], PCSet.new([0,1,3,5,6,8,10]).interval_vector)
    assert_equal([0,6,0,6,0,3], PCSet.new([0,2,4,6,8,10]).interval_vector)
  end

  def test_complement
    assert_equal([6,7,8,9,10,11], PCSet.new([0,1,2,3,4,5]).complement.pitches)
    assert_equal([3,4,5], PCSet.new([0,1,2], 6).complement.pitches)
  end

  #
  # Test values from (Morris 1991), pages 105-111
  # Citation:
  # Morris. Class Notes for Atonal Music Theory
  # Lebanon, NH. Frog Peak Music, 1991.
  #
  def test_invariance_vector
    assert_equal([1,0,0,0,5,6,5,5],PCSet.new([0,2,5]).invariance_vector)
    assert_equal([2,2,2,2,6,6,6,6],PCSet.new([0,1,6,7]).invariance_vector)
    assert_equal([6,6,6,6,6,6,6,6],PCSet.new([0,2,4,6,8,10]).invariance_vector)
    assert_equal([1,0,0,0,0,0,0,0],PCSet.new([0,1,2,3,4,5,8]).invariance_vector)
    assert_equal([1,0,0,1,0,0,0,0],PCSet.new([0,1,2,3,5,6,8]).invariance_vector)
    assert_equal([12,12,12,12,0,0,0,0],PCSet.new([0,1,2,3,4,5,6,7,8,9,10,11]).invariance_vector)
  end

  #
  # Test values from (Huron 1994). Huron rounds, thus the 0.01 margin of error.
  # Citation:
  # Huron. Interval-Class Content in Equally Tempered Pitch-Class Sets: 
  # Common Scales Exhibit Optimum Tonal Consonance. 
  # Music Perception (1994) vol. 11 (3) pp. 289-305
  #
  def test_huron
    h1 = PCSet.new([0,1,2,3,4,5,6,7,8,9,10,11]).huron
    assert_in_delta(-0.2, h1[0], 0.01)
    assert_in_delta(0.21, h1[1], 0.01)
    h2 = PCSet.new([0,2,4,5,7,9,11]).huron
    assert_in_delta(4.76, h2[0], 0.01)
    assert_in_delta(0.62, h2[1], 0.01)
  end

  def test_coherence

  end
end
我这样称呼他们:

> my_pcset = PCSet.new([0,2,4,6,8,10])
> my_pcset2 = PCSet.new([1,5,9])
它应该返回:

> my_pcset = PCSet.new([0,2,4,6,8,10])
=> [0, 2, 4, 6, 8, 10]
> my_pcset2 = PCSet.new([1,5,9])
=> [1, 5, 9]
但他什么也没回来。 该代码可在
谢谢

在terminal:
irb-r./path\u to\u directory/pcset.rb中尝试一下,然后初始化对象。

我认为回购的文档很糟糕,因为它没有解释应该如何运行它

结果

my_pcset = PCSet.new([0,2,4,6,8,10])
应该将my_pcset设置为pcset的实例,而不是数组,这样自述文件中的这些行充其量就是混乱的

3.如何使用它 制作新的PCSET:

my_pcset=pcset.new([0,2,4,6,8,10])

=>[0,2,4,6,8,10]

my_pcset2=PCSet.new([1,5,9])

=>[1,5,9]

查看代码,我看到
inspect
已委托给
@pitchs

  def inspect
    @pitches.inspect
  end
我想如果你检查一下我的电脑,你会得到预期的结果

my_pcset = PCSet.new([0,2,4,6,8,10])
p my_pcset # will print [0, 2, 4, 6, 8, 10]

or `my_pcset.inspect` will return what you are expecting.

如果my_pcset=pcset.new([0,2,4,6,8,10])
没有返回任何内容,您在哪里调用它?代码很好用,请提供一个。特别关注最小部分。我怀疑它需要300多行代码来证明您的问题。事实上,我怀疑它甚至需要30行。@user253538:如果你设置
my_pcset=pcset.new(…)
,你将
my_pcset
设置为
pcset
的一个实例,而不是
Array
的一个实例,正如你在文章中指出的那样。