Ruby替代后藤

neskvpey  于 2023-06-22  发布在  Ruby
关注(0)|答案(3)|浏览(83)

我怎么能在Ruby中做这样的事情?

if variable = something  
    do A  
    do B  
    do D  
elsif variable = something different
    do A
    do B
    do C
    do D
else
    do A
    do C
    do D

A = set of loops with if else
B = set of loops with if else
C = set of loops with if else
D = final steps

寻找一种在Ruby中完成类似的事情的方法。我相信这个问题在某个地方有答案,但我不知道它叫什么。我发现了一些关于gem的信息,可以让你使用goto,但我更愿意学习正确的方法来做到这一点(也似乎这可能是一个笑话)。我宁愿自己写代码,但我可以把我的实际代码,如果这有助于回答我的问题。
如果有人能给我指个方向。
另外,如果goto不是一个笑话,为什么它不可以使用?

wi3ka0sx

wi3ka0sx1#

而不是后藤只是为A,B等创建函数并使用它们
例如:

def A
  # Lot of code
end

现在你可以通过写Agoto A。
另外,也可以使用switch case代替if/else,这样代码看起来就像

A
case variable
when something
  B
  D
when something else
  B
  C
  D
else
  C
  D
end
h6my8fg2

h6my8fg22#

这是一个典型的使用开关的情况。Here就是你在ruby中如何做到的。另外,我将创建所有do的方法并从when内部调用它们

rmbxnbpk

rmbxnbpk3#

我已经创建了一个工作label + goto gist,它非常简单,但这是我的尝试,如果你喜欢它,看看this gist
代码用法示例:

label_stack_main do
  x = 0

  label(:increment) do
    x += 1
    goto :example
  end

  label(:example) do
    puts x
    goto :increment if x < 10
  end
  
  label(:start) do
    goto :example
  end
end

输出以下内容:

user@machine:~/path/to/projects/labels_test/$ ruby labels_test.rb 
0
1
2
3
4
5
6
7
8
9
10

希望有人会喜欢这个:)

相关问题