USING: fry kernel io.directories sequences unicode.case ;
IN: util.directories
: move-each-directory-file>lower ( pathname -- )
[ dup >lower ] move-each-directory-file ;
: move-each-directory-file>upper ( pathname -- )
[ dup >upper ] move-each-directory-file ;
: each-directory-file ( pathname quot -- )
'[ [ @ ] each ] with-directory-files ; inline
: move-each-directory-file ( pathname quot -- )
'[ @ move-file ] each-directory-file ; inline
我试图将尽可能多的代码分解为可重用的词汇表。我期待提出改进的建议。
#1 楼
评论!评论是很好的,特别是对于现在才刚刚学习Factor的人。诚然,对于Factor来说,它很可读-凝视了一会儿,做了很多谷歌搜索后,我终于明白了-但是评论总是很不错。在线语法-即: name>something ( etc -- etc )
部分。因此,我只是假设它是一种好的语法,然后继续。好吧,我终于找到了!是的,这是一个很好的语法-您应该将>something
用于将a>b
转换为a
的函数,这正是您的工作。最好将其称为b
/ directory-file-names>upper
,但这只是个人喜好。看起来不错。在弄清楚了Factor的工作原理之后,它(对于Factor)可读性很强,实际上让我想更多地使用该语言。另外,据我所知,您在信中遵循的是官方编码风格。干得好。
#2 楼
我花了好几个小时弄清楚因素。这是一种非常有趣的语言。使用高阶函数,实际上是将名称转换操作传递给文件移动操作,然后将文件传递操作传递给文件迭代器操作。因此,此代码中的任何地方都没有重复的逻辑
您想到的名字都是一流的: :与
each-directory-file
中的with-directory-files
和语言本身中的io.directories
一致each
,... move-each-directory-file
,... >lower
:完全按照他们说的做,>upper
前缀和move-
,>lower
后缀都使意义>upper
:很好,但是“路径”可能会稍微好一些,与pathname
保持一致with-directory-files
:与该语言中的许多示例保持一致当我尝试运行程序时,
编译器抱怨:
4: : move-each-directory-file>lower ( pathname -- )
5: [ dup >lower ] move-each-directory-file ;
^
No word named “move-each-directory-file” found in current vocabulary search path
似乎无法用另一个未知词来定义一个词。如果我对声明重新排序,就可以加载您的程序:
USING: fry kernel io.directories sequences unicode.case ;
IN: util.directories
: each-directory-file ( pathname quot -- )
'[ [ @ ] each ] with-directory-files ; inline
: move-each-directory-file ( pathname quot -- )
'[ @ move-file ] each-directory-file ; inline
: move-each-directory-file>lower ( pathname -- )
[ dup >lower ] move-each-directory-file ;
: move-each-directory-file>upper ( pathname -- )
[ dup >upper ] move-each-directory-file ;
评论
\ $ \ begingroup \ $
从技术上讲,您可以添加另一个函数,该函数在传递大小写转换函数时调用dup。 “路径名”也是文档中使用的名称,因此可以说比“路径”更好。另一个有趣的事情是文档功能,因此对于每个功能,可以添加添加非常详细的文档字符串,脚手架工具将为词汇表生成骨架。
\ $ \ endgroup \ $
–ferada
15年6月28日在11:15
\ $ \ begingroup \ $
@ferada,如果您就我会投票赞成的所有问题写出答案
\ $ \ endgroup \ $
– janos
15年6月28日在11:35
#3 楼
现在,对@janos进行完整评论:我之前保存的代码(dup
)看起来像这样(顺便说一句。我可以用directories.factor
加载而没有任何问题:
USING: fry kernel io.directories sequences unicode.case ;
IN: util.directories
: each-directory-file ( pathname quot -- )
'[ [ @ ] each ] with-directory-files ; inline
: move-each-directory-file ( pathname quot -- )
'[ @ move-file ] each-directory-file ; inline
: transform-each-directory-file ( pathname quot -- )
'[ dup @ ] move-each-directory-file ; inline
: move-each-directory-file>lower ( pathname -- )
[ >lower ] transform-each-directory-file ;
: move-each-directory-file>upper ( pathname -- )
[ >upper ] transform-each-directory-file ;
“路径名”也是
在文档中使用的内容,
是在使用“正确的”命名约定。
功能可以添加非常详细的文档字符串,
脚手架
工具
将为词汇生成骨架。运行后
USE: util.directories
和USE: tools.scaffold
并填写点,最后我得到了另一个文件(
"resource:work" "util.directories" scaffold-vocab
),例如:
USING: help.markup help.syntax kernel quotations ;
IN: util.directories
HELP: each-directory-file
{ $values
{ "pathname" "a pathname string" } { "quot" quotation }
}
{ $description "Run the quotation on each filename in a directory." } ;
HELP: move-each-directory-file
{ $values
{ "pathname" "a pathname string" } { "quot" quotation }
}
{ $description "Move each file in a directory to the return value of the quotation running on the filename." } ;
HELP: move-each-directory-file>lower
{ $values
{ "pathname" "a pathname string" }
}
{ $description "Rename each file in a directory to lower case." } ;
HELP: move-each-directory-file>upper
{ $values
{ "pathname" "a pathname string" }
}
{ $description "Rename each file in a directory to upper case." } ;
HELP: transform-each-directory-file
{ $values
{ "pathname" "a pathname string" } { "quot" quotation }
}
{ $description "Rename each file in a directory to the return value of running the quotation on the filename." } ;
ARTICLE: "util.directories" "util.directories"
{ $vocab-link "util.directories" }
;
ABOUT: "util.directories"
这对记录所有内容非常好详细信息并通过内置浏览器等访问它。
评论
\ $ \ begingroup \ $
我最终不再使用Factor了,但是我确实写了自己的连接语言,所以我认为这很重要。
\ $ \ endgroup \ $
–莫妮卡基金的诉讼
17-10-8在19:44