我正在创建一个Caeser Cypher代码,我无法弄清楚如何让搜索循环"返回"我的字母数组中的"a".
这是我得到的:
def ceaser_cypher(string, num)
alphabet = ("a".."z").to_a
letters = string.split("")
letters.map!.with_index do |let,idxs|
if alphabet.include?(let)
alphabet[alphabet.index(let) + num]
end
end
letters.join("")
end
Run Code Online (Sandbox Code Playgroud)
就像大多数字母的魅力一样,但是对于"y"和"z",它们当然会返回nil,例如,num == 3因为字母数组中没有三个以上的索引; 而不是分别返回"b"或"c".那么如何才能让循环开始呢?
我需要编写一个方法,它接受一个未知数量的参数(因此*splat)但是它传递了一个yields_with_args规范.
代码:
def eval_block(*args, &block)
raise "NO BLOCK GIVEN!" if block.nil?
block.call(args)
end
Run Code Online (Sandbox Code Playgroud)
rspec:
it "passes the arguments into the block" do
expect do |block|
eval_block(1, 2, 3, &block)
end.to yield_with_args(1, 2, 3)
end
end
Run Code Online (Sandbox Code Playgroud)
它工作,但它产生*splat创建的数组:[1,2,3]vs 1,2,3,因此不传递rspec.是否有另一种方法通过Ruby中的方法传递多个参数?
我正在尝试制作一个cat克隆,并且我要求它在出现时接收输入-.
主要的(); 在这儿:
import java.io.*;
import java.util.*;
class cat {
public static void main(String[] args) {
for (int i = 0; i < args.length; i++) {
try{
filePrint(args[i]);
} catch(DashException letsTryThis){
catDash();
} catch(FileNotFoundException wrong) {
System.err.println(String.format("%s: File Not Found.", args[i]));
} catch (IOException noWords) {
System.err.println(String.format("%s: File can't be read.", args[i]));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
filePrint()只是逐行打印文件并catDash()接收并打印标准输入.没什么特别的.
我要做的是有一个自定义异常,专门捕获-和调用catDash()(上面的第一个catch块).但是,无论如何,try/catch块总是抛出FileNotFound wrong异常(上面的第二个catch块).我的问题是,如何让它捕获特定原因并在第二个块之前抛出它?
我DashException定义它自己的文件:
import java.lang.Throwable;
public class DashException …Run Code Online (Sandbox Code Playgroud)