gpt4 book ai didi

ruby - 帮助 Ruby 中的 lambda

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

我是 Ruby 的新手,正在尝试将 sort_by lambda 传递给格式化方法,如下所示:

sort_by_methods = [ lambda {|l, r| compare_by_gender_then_last_name(l, r)}, 
lambda {|l, r| compare_by_something_else(l, r)},
lambda {|l, r| compare_by_another(l, r)}]

formatted_output = ""
sort_by_methods.each do |sort_by|
formatted_output << formatter.format(students) { sort_by }
end

格式化方法代码如下所示:

def format(students, &sort_by)
sorted_students = students.sort { |l, r| sort_by.call(l, r) } // error from this line
sorted_students.each { |s| result << s.to_s << "\n" }
end

出于某种原因,我收到了解释器对上述格式方法代码 (students.sort.....) 中的行的投诉:“在 sort': undefined method>' for # (NoMethodError)”

我做错了什么?我假设我搞乱了传递 lambda 的语法,但不知道如何做。

谢谢。

最佳答案

问题出在这一行:

formatted_output << formatter.format(students) { sort_by }

format() 用一个不接受任何参数的 block 调用并返回 +sort_by+ block 。这就是为什么稍后 sort_by.call(l, r) 会不及格的原因。该 block 不接受任何参数。

如果你这样改变它,它应该可以工作:

formatted_output << formatter.format(students, &sort_by)

特殊的 & 语法表明 sort_by 是一个 block ,它像 { } 符号一样被传递。

关于ruby - 帮助 Ruby 中的 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1987062/

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