- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我一直在断断续续地使用 Lisp,我正在 catch clojure。
clojure的好处是我可以很自然地使用所有的java函数,clojure的坏处也是我必须自然地了解java函数。
例如,我不得不花一些时间(谷歌搜索)在 Java 中找到平方函数(Clojure 表示法中的 Math/sqrt)。
您能否为不太熟悉 Java 的 clojure 用户推荐一些关于 Java 函数(库)的好的信息资源?
它可以是任何东西——好书、网页、论坛或其他任何东西。
最佳答案
当我第一次开始使用 Clojure 时,我遇到了类似的问题。几年前我做过一些 Java 开发,但对那里的库仍然很不熟悉。
介绍
我发现使用 Java 的最简单方法是不真正使用它。我认为从 Clojure 开始使用 Java 的书会有点多。没有那么多你真正需要知道的,除非你真的开始深入研究 JVM/Java 库。让我解释。
花更多时间学习如何从内到外使用 Clojure,并熟悉 Clojure-Contrib。例如,clojure.contrib 中的 sqrt
is in generic.math-functions。
您需要的许多东西实际上已经在 Clojure 中——但仍有很多东西没有。
熟悉 Clojure 中使用 Java 的调用约定和语法糖。例如根据您的示例, Math/sqrt
正在调用类 sqrt
中的静态方法(基本上只是一个函数) Math
。
不管怎样,如果您发现自己真的需要使用 Java,这里有一份指南应该可以帮助您入门。我将假设您已经完成了一些命令式 OO 编程,但除此之外并没有太多其他内容。即使你没有,你也应该没事。
Isaac 的 Clojurist's Java 指南
类(class)
类是一组方法(作用于类的函数),它们
也可以是数据类型:例如创建一个类型为 Double
的新类: (Double. 1.2)
,它初始化 Double 类(句点是调用类构造函数方法的语法糖,它使用您提供的值初始化类),值为 1.2
。
现在,看看 Java 6 API 中的 Double
class:
Double
public Double(double value)
Constructs a newly allocated Double object that represents the
primitive double argument.
Parameters:
value - the value to be represented by the Double.
所以你可以看到那里发生了什么。您“构建”了一个新的
Double
,其值为
1.2
,这是一个 double 值。有点令人困惑,但真正的 Double 是一个代表 Double 的类,可以做与 double 相关的事情。
Double
的特定实例,我们可以像调用
sqrt
那样调用它)
parseDouble(String s)
:
(Double/parseDouble "1.2") => 1.2
不要在那里棘手。
(-> (String. "Hey there") ;; make a new String object
(.toUpperCase)) ;; pass it to .toUpperCase (look up -> to see what it does)
;; toUpperCase is a non-static method
=> "HEY THERE"
所以现在我们使用了一个非静态的方法,它需要一个真实的、实时的
String
对象来处理。让我们看看文档是如何工作的:
toUpperCase
public String toUpperCase()
Converts all of the characters in this String to upper case using
the rules of the default locale. This method is equivalent to
toUpperCase(Locale.getDefault()).
Returns:
the String, converted to uppercase.
所以这里我们有一个返回字符串的方法(如定义中public后面的“String”所示,不带参数。但是等等!它确实带了一个参数。在Python中,它是隐式参数
self
:这在 Java 中称为
this
。
(.toUpper (String. "Hey there"))
并得到相同的结果。
JFrame
库的
javax.swing
。我们可能需要对它做很多事情,而不是用它(您通常使用值操作,而不是在函数式语言中操作它们)。我们可以像这样:
(doto (JFrame. "My Frame!");; clever name
(.setContentPane ... here we'd add a JPanel or something to the JFrame)
(.pack) ;; this simply arranges the stuff in the frame–don't worry about it
(.setVisibleTrue)) ;; this makes the Frame visible
doto
只是将其第一个参数传递给您提供的所有其他函数,并将其作为第一个参数传递给它们。所以在这里我们只是对
JFrame
做了很多没有特别返回任何东西的事情。所有这些方法都在文档中列为
JFrame
的方法(或其父类(super class)......暂时不要担心这些)。
proxy
和
reify
以及
extend-type
及其 friend 。我不经常使用它们,但当我需要时,它们可能是无价的。事实上,我自己仍然在理解它们。
关于面向 Clojure 用户的 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3525403/
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我无法使用 Elixir 连接到 Postgres: ** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P
这个问题已经有答案了: Group by field name in Java (7 个回答) 已关闭 7 年前。 我必须编写一个需要 List 的方法并返回 Map> . User包含 Person
感谢您的帮助,首先我将显示代码: $dotaz = "Select * from customers JOIN contracts where customers.user_id ='".$_SESS
我只想向所有用户中的一个用户显示一个按钮。我尝试了 orderByKey() 但没有成功! 用户模型有 id 成员,我尝试使用 orderByChild("id") 但结果相同! 我什至尝试了以下技巧
我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。 在这一步,我正在考虑安全性并尽可能锁定。因此,我希望设置一个 replication 用户(角色)并让 BDR
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我可以使用 Sonata User Bundle 将 FOS 包集成到 sonata Admin 包中。我的登录功能正常。现在我想添加 FOSUserBundle 中的更改密码等功能到 sonata
在 LinkedIn 中创建新应用程序时,我得到 4 个单独的代码: API key 秘钥 OAuth 用户 token OAuth 用户密码 我在 OAuth 流程中使用前两个。 的目的是什么?最后
所以..我几乎解决了所有问题。但现在我要处理另一个问题。我使用了这个连接字符串: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
我有一组“用户”和一组“订单”。我想列出每个 user_id 的所有 order_id。 var users = { 0: { user_id: 111, us
我已经为我的Django应用创建了一个用户模型 class User(Model): """ The Authentication model. This contains the u
我被这个问题困住了,找不到解决方案。寻找一些方向。我正在用 laravel 开发一个新的项目,目前正致力于用户认证。我正在使用 Laravels 5.8 身份验证模块。 对密码恢复 View 做了一些
安装后我正在使用ansible配置几台计算机。 为此,我在机器上本地运行 ansible。安装中的“主要”用户通常具有不同的名称。我想将该用户用于诸如 become_user 之类的变量. “主要”用
我正在尝试制作一个运行 syncdb 的批处理文件来创建一个数据库文件,然后使用用户名“admin”和密码“admin”创建一个 super 用户。 到目前为止我的代码: python manage.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我已在 Azure 数据库服务器上设置异地复制。 服务器上运行的数据库之一具有我通过 SSMS 创建的登录名和用户: https://learn.microsoft.com/en-us/azure/s
我有一个 ionic 2 应用程序,正在使用 native FB Login 来检索名称/图片并将其保存到 NativeStorage。流程是我打开WelcomePage、登录并保存数据。从那里,na
这是我的用户身份验证方法: def user_login(request): if request.method == 'POST': username = request.P
我试图获取来自特定用户的所有推文,但是当我迭代在模板中抛出推文时,我得到“User”对象不可迭代 观看次数 tweets = User.objects.get(username__iexact='us
我是一名优秀的程序员,十分优秀!