gpt4 book ai didi

Java:限制变量范围的策略

转载 作者:行者123 更新时间:2023-11-29 10:08:32 25 4
gpt4 key购买 nike

我只是偶然发现了一个错误,并问自己是否有更好的方法。

首先我有这段代码。

// read lines out of a file and do something with it in foo
BufferedReader br = new BufferedReader (new FileReader ("bla.txt"));
String line;
while ((line = br.readLine ()) != null)
{
foo (line);
}
br.close ();

然后我改了。引入了一个列表,而不是在读取循环中工作。

BufferedReader br = new BufferedReader (new FileReader ("bla.txt")); 
List <String> lst = new ArrayList <String> ();
String line;
while ((line = br.readLine ()) != null)
{
lst.add (line);
}
br.close ();
for (String s : lst)
{
foo (line); // !!!
}

请忽略这不是真正的优化。该代码只是对我的问题的简化。

在使用集合时我犯了一个错误。我确实保留了 foo(s) 的 foo(line)。那不是编译器错误,而是我的算法错误。

如果使它更加模块化(使用函数等)不合适,那么避免这个问题的好策略是什么?

我想通过将它放入一个 block 来限制行的范围。

BufferedReader br = new BufferedReader (new FileReader ("bla.txt")); 
List <String> lst = new ArrayList <String> ();

{
String line;
while ((line = br.readLine ()) != null)
{
lst.add (line);
}
br.close ();
}

for (String s : lst)
{
foo (line); // error now
}

但我不确定这是一个常见的好策略。对这类问题有什么建议吗?谢谢!

最佳答案

您正在寻找的是具有纯函数 [1]。为了实现这一点,您应该有两个独立的功能,一个用于读取内容,另一个用于处理内容。第二个函数应该将参数作为列表。像下面这样的东西:

List<String> readContent(){ 
BufferedReader br = new BufferedReader (new FileReader ("bla.txt"));
List <String> lst = new ArrayList <String> ();

{
String line;
while ((line = br.readLine ()) != null)
{
lst.add (line);
}
br.close ();
}
return lst;
}

void processContent(List<String> contentList){
for (String s : contentList){
foo (s); // error now
}
}

在您的 main 方法中,您将像下面这样调用这两个函数:

List<String> contents = readContent();
processContent(contents);

此外,还应该对这两个功能进行单元测试。

[1] https://en.wikipedia.org/wiki/Pure_function

关于Java:限制变量范围的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56904833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com