gpt4 book ai didi

ruby - 为什么在这里使用 lambda 而不是两个预定义的方法?

转载 作者:数据小太阳 更新时间:2023-10-29 08:29:31 25 4
gpt4 key购买 nike

def divideset(rows, column, value)
split_function = nil

if value.is_a?(Fixnum) || value.is_a?(Float)
split_function = lambda{|row| row[column] >= value}
else
split_function = lambda{|row| row[column] == value}
end

set1 = rows.select{|row| split_function.call(row)}
set2 = rows.reject{|row| split_function.call(row)}
[set1, set2]
end

在这段来自 treepredict 的代码中, 为什么要使用 lambda?

似乎作者可以预定义两种不同的方法来处理 if/else 语句的两种情况,而不是调用 split_function.call(row)——一种用于 row[column] >= value 另一个是 row[column] == value

这里使用 lambda 有什么额外的优势吗?

最佳答案

在这种情况下使用 lambda 没有额外的技术优势。

考虑您的建议:

def split_function_default(row, column, value)
row[column] == value
end

def split_function_number(row, column, value)
row[column] >= value
end

def divideset(rows, column, value)
set1 = nil
set2 = nil
if value.is_a?(Fixnum) || value.is_a?(Float)
set1 = rows.select{|row| split_function_number(row, column, value)}
set2 = rows.reject{|row| split_function_number(row, column, value)}
elif
set1 = rows.select{|row| split_function_default(row, column, value)}
set2 = rows.reject{|row| split_function_default(row, column, value)}
end
[set1, set2]
end

哪个更清楚?就个人而言,我更喜欢 lambda 版本,因为它更简洁。

关于ruby - 为什么在这里使用 lambda 而不是两个预定义的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416875/

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