Functional programming 如何处理代码中的警告(不是编译器)
假设你有函数A,B和C,A将被调用,然后调用B,然后B调用一堆东西的C.C循环。C确定存在至少应该让用户知道的警告,但它不会阻止该过程。您将如何向客户传达这些警告 如果我将用于警告的列表从a传递到B,那么它将直接传递到C,因为B对它没有任何用处。异常将阻止C继续其循环 这是正常问题吗?解决这个问题的优雅方法是什么 编辑:代码示例Functional programming 如何处理代码中的警告(不是编译器),functional-programming,Functional Programming,假设你有函数A,B和C,A将被调用,然后调用B,然后B调用一堆东西的C.C循环。C确定存在至少应该让用户知道的警告,但它不会阻止该过程。您将如何向客户传达这些警告 如果我将用于警告的列表从a传递到B,那么它将直接传递到C,因为B对它没有任何用处。异常将阻止C继续其循环 这是正常问题吗?解决这个问题的优雅方法是什么 编辑:代码示例 def A(): items = [ [1,2,3], [4,5,6], [7,8,9] ] t
def A():
items = [
[1,2,3],
[4,5,6],
[7,8,9]
]
try:
B(items)
except Exception, e:
print e
def B(items):
for num_list in items:
if len(num_list) == 0:
raise ValueError('A numberlist cannot be emtpy')
C(num_list)
def C(numbers):
for num in numbers:
if num > 9:
## -- Warning???
print '%i is greater than 9, this might break things'
print num
我有一个pass A函数,它可以将某种类型的日志写入到B,然后是C,然后C可以调用它来记录警告。如果您使用的语言支持诸如Racket之类的参数,那么您可以使用这些参数。请注意,这并不是指函数参数,在Racket中,参数是一种以线程安全和更优雅的方式处理状态的机制。从本质上讲,参数是一个变量,您只能对代码的特定部分进行变异,并且它在退出后自动回滚更改,即使出现异常或继续跳转等意外的控制流也是如此。但是,我知道除了Racket之外,没有其他语言提供这种构造。提供一个实际的代码示例(即使它已损坏或不完整)让其他人修复它总是很有帮助的。语言不重要。是什么让你认为B“对”一个警告列表没有用处?A打电话给B去完成某件事,包括把它适当地设置好。B通过调用C时传递它来适当地设置它。只要在您的头脑中清楚全局状态的变化和每个函数要计算的返回值。