Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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
动态常量赋值main.rb:6:Ruby_Ruby_Ruby On Rails 4 - Fatal编程技术网

动态常量赋值main.rb:6:Ruby

动态常量赋值main.rb:6:Ruby,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我在循环中命名变量时出现了这个错误。该方法的要点是打印数组中唯一具有唯一奇偶校验的元素的索引位置。例如,该方法应该为以下输入数组打印“3”,因为它是唯一的奇数,其他所有数字都是偶数:[2、4、6、3、8、10]。更具体地说,它指出了下面“奇数”和“偶数”变量的错误(“main.rb:7:动态常数赋值奇数=数字[i]%2==1”) def测试(数字) i=1 count奇数=0 偶数=0 奇数=数字[i]%2==1 偶数=数字[i]%2==0 而我false,类似地,您可以为偶数定义一个Proc

我在循环中命名变量时出现了这个错误。该方法的要点是打印数组中唯一具有唯一奇偶校验的元素的索引位置。例如,该方法应该为以下输入数组打印“3”,因为它是唯一的奇数,其他所有数字都是偶数:[2、4、6、3、8、10]。更具体地说,它指出了下面“奇数”和“偶数”变量的错误(“main.rb:7:动态常数赋值奇数=数字[i]%2==1”)

def测试(数字)
i=1
count奇数=0
偶数=0
奇数=数字[i]%2==1
偶数=数字[i]%2==0
而我<数字长度
如果奇怪的话
count奇数+=1
else count偶数+=1
结束
i+=1
结束
如果countEven==1
打印奇数索引
否则打印偶数索引
结束
结束

当你在Ruby中定义一个大写的变量时,它是一个常量——它是一种特殊的变量,不允许改变值(从技术上讲,你可以用
const_set
来改变它,但这在这里并不重要)

由于这个限制,Ruby不允许您在函数中更改常量。它假设函数将被多次调用,这将导致常量的值发生变化,正如我刚才提到的,这是非法的


因此,快速修复,只需将您的
奇数
偶数
替换为小写版本
奇数
偶数
。这样,它们是正则变量而不是常量。

使用内置数组方法可以轻松返回上述代码:

even_numbers = numbers.select(&:even?)
odd_numbers = numbers.select(&:odd?)
然后偶数计数将是
偶数。计数
,同样地
奇数。计数

第一个奇数索引将是
数字。查找索引(奇数)。第一个)

对于常数,您可以为该常数指定一个proc:
Odd=Proc.new{| n | n%2==1}
然后像这样调用常量:
Odd.call(10)#=>false
,类似地,您可以为偶数定义一个Proc

这里发生的事情是,每次调用方法时,常量都将被重新定义,从而具有一个新的值,但常量意味着保存一个不会更改的值,这就是错误的原因

还要注意,方法中的以下条件:

if Odd
  then do something
....
这实际上并不正确。一旦常量持有一个值,那么它将在执行期间具有该值。因此,在执行
Odd=some_整数%2==1
之后,
Odd
常量将始终为true或false。并且不会在
if
条件下重新执行
某个整数%2==1
。但是如果你把它变成一个proc或者lamda,那么就重新进行计算,因为这就好像你在调用一个方法


[注意]但是,在方法中执行
Odd=Proc.new{n | n%2==1}
仍然会给您带来相同的错误
dynamic constant assignment Odd=Proc.new{n | numbers[n]%…
因为每次方法运行时都会重新执行代码,每次都会给出不同的常量值{| n | n%2==1}方法之外的定义,然后执行
if-Odd.call(i)
将很好地工作。

很好,解决了这个问题!现在它只是给我以下错误:未定义false的方法'index':false类(NoMethodError),尽管不确定原因。@Codestudio您需要重新检查程序的逻辑。当前
变量都是布尔值,这意味着它们没有变量
索引
。如果满足该条件,您需要存储
i
的值,而不是将这些变量存储为布尔值。。.
if Odd
  then do something
....