我很难弄清楚如何从 Scala 高阶函数定义跳转到所提供的示例。它在 this slide show 中提供在 slide 81 .
这是高阶函数定义:
trait X[A] { def map[B](f: A => B): X[B] }
以下是提供的示例:
(1 to 10) map { x => x * 2 } // evaluates to Vector(2, 4, ..., 20)
(1 to 10) map { _ * 2 } // shorthand!
嗯?!我只需要在这里缺少一些步骤。我知道这些示例可能同时利用了函数定义和一些 Scala 的优点。我只是没有足够的经验阅读 Scala 和做出相关假设。
我的背景是 Java OO。我现在正在学习 Scala 和函数式编程。这不是我不理解的第一个这样的例子。这只是我觉得我有勇气发帖的第一个,因为我知道我会显得很无知。
我确实尝试研究过这个。首先,我去了斯卡拉“圣经”,"Programming in Scala 2nd Edition" ,并试图从那里理解 if (第 165-9 页)。然后,我在 StackOverflow 上进行了搜索。我发现了几个关于该地区的链接。但是,实际上没有任何东西向我展示 Scala 高阶函数定义与提供的示例之间的联系,以映射到本幻灯片中的特定实例的方式。
这是我在 StackOverflow 上找到的内容:
我现在才意识到我跳过了 Google,直接来到了 StackOverflow。嗯。如果你用谷歌搜索并找到正确的链接,我很乐意看到它。我已经没有时间筛选所有使用 monkey-monad、blastomorphisms 等术语的 Google 链接,这让我更加困惑,也不太可能尝试解决这个问题。
最佳答案
我认为以下只是为了显示 Scala 的一些集合属性而提供的示例签名。特别是它没有显示任何实现,因此您无法真正连接所有点。 而且它实际上与示例不一致......所以,这可能令人困惑。
trait X[A] { def map[B](f: A => B): X[B] }
我会这样理解:给定一个集合类 X,类型为 A 的元素:
map 函数,在类型 B 上进行参数化map 函数采用函数 f 将单个 A 转换为单个 Bmap 在 B 类型的元素上返回相同类型 X 的集合。然后它跳转到示例来说明使用:
(1 to 10) map { x => x * 2 }
所以,连接点:
X是(1到10)的类型,这里是一个Rangef: A => B 是 x => x * 2,它被推断为一个接受 Int 并返回和 Int.Int 上的 Range,但实际上返回的是 IndexedSeq。一个更好的例子可能是:
List(1, 2, 3).map(i => i + "!") // a List[Int]
// returns a List[String]: List("1!", "2!", "3!")
关于java - Scala 高阶函数与提供示例之间的逐步连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9454370/
我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee
我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www