小编doo*_*ree的帖子

如何在Apple的Swift语言中生成一个随机数?

我意识到Swift书提供了随机数生成器的实现.最好的做法是将此实现复制并粘贴到自己的程序中吗?或者是否有一个我们现在可以使用的库?

random swift

423
推荐指数
20
解决办法
30万
查看次数

为什么`method =`不像其他方法一样处理?

请考虑以下代码段:

class Example
  def my_attr=(value)
    @_my_attr = value
    @_my_attr * 3
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望表达式Example.new.my_attr = 5返回15,但结果证明是错误的.即使我=明确调用该方法,也始终返回原始返回值:

Example.new.my_attr = 5 # => 5
Example.new.my_attr=(5) # => 5
Run Code Online (Sandbox Code Playgroud)

Ruby如何以及为什么这样做?Ruby是否会处理=特别结束的方法,还是其他机制?我想这排除了链接=方法的返回值,对吧?有没有办法让Ruby的行为有所不同,或者这是怎么回事?

更新:感谢@jeffgran:

Example.new.send(:my_attr=, 5) # => 15
Run Code Online (Sandbox Code Playgroud)

这是一种解决方法,但在另一个层面上甚至更令人困惑,因为这意味着send在行为方面显然并不总是直接调用方法.

ruby

11
推荐指数
1
解决办法
276
查看次数

||的奇怪含义 和|| =在Ruby中(2.0,1.9.3,jruby 1.7.4)

从刚刚启动的会话中考虑以下irb片段:

irb:01> baz            # => NameError, baz is not defined
irb:02> baz || baz = 0 # => NameError, baz is not defined
irb:03> baz            # => nil
Run Code Online (Sandbox Code Playgroud)

baz是一个未定义的变量,试图评估它产生了一个NameError.然而,不知何故,在这个操作之后,baz被定义了,并且具有值nil.看起来,即使没有人(明确地)要求它,也将值nil赋给变量baz.是否存在潜在的语言原因,为什么这种行为是可取的?

解释此行为和其他类似混淆构造的规则是什么,例如:

irb:04> true if foo            # => NameError
irb:05> foo                    # => NameError; name still undefined
irb:06> foo = (true if foo)    # => nil
irb:07> foo                    # => nil; name defined as nil
irb:08> true || i = 0 …
Run Code Online (Sandbox Code Playgroud)

ruby jruby

10
推荐指数
1
解决办法
159
查看次数

在Sublime Text 3中的布局之间切换

我正在使用Sublime Text 3.我有一个布局,左边是一个屏幕高度的列,右边是三个窗格(见下图).这个设置很棒(特别是使用Golden Ratio插件),但我仍然错过了vim中的一个功能.我有一个热键导致焦点窗格占据整个窗口,就像进入该文件的全屏模式一样.完成后,您可以再次输入热键以恢复到之前的布局.这就好像保存了窗格的原始布局,并且聚焦窗格暂时占据整个窗口,当您完成全屏编辑文件时,程序会记住事情的布局并恢复到原来的状态.这是一个ASCII艺术示例:

          BEFORE                                 AFTER
----------------------------          ----------------------------
|            |             |          |                          |
|            |             |          |                          |
|            |-------------|          |                          |
|            |             |          |                          |
|            |             |          |                          |
|            |-------------|          |                          |
|            |             |          |                          |
|            |             |          |                          |
----------------------------          ----------------------------
Run Code Online (Sandbox Code Playgroud)

通过键入热键,您可以切换BEFOREAFTER; 再次键入相同的热键会使您返回到BEFORE每个窗格中相同的布局和相同的选项卡.

有没有办法在Sublime Text 3中执行此操作,包括可能启用此功能的插件?如果读者知道如何编写Sublime插件,你认为编写这样一个插件有多难?我猜它不会太糟糕:在某个地方隐藏状态并以编程方式告诉Sublime在从全屏模式切换回来时恢复原状.

sublimetext sublimetext3

8
推荐指数
1
解决办法
3713
查看次数

如何在Clojure中创建命令行可执行文件

我在Clojure中编写了一个程序,我想在命令行上执行它,而无需在命令行上专门调用java(例如java -jar).我想要一个可执行文件,例如myprogram,接受任何参数并运行我的程序.以下是一些可能使这更容易的事情:

  1. 假设安装了Java就可以了 java位于路径中.
  2. 虽然适用于Windows的解决方案将是一个很好的解决方案,但您可以假设这一切都是在类似UNIX的操作系统(如Mac OS X或Ubuntu)上完成的.
  3. 在某种脚本中调用Java是可以的.
  4. 可以使用其他语言,例如Ruby,Python或Perl,用户可能已安装或未安装.All-bash会很酷,因为我可以假设有人拥有它.
  5. 如果我必须使用某种工具来构建将要执行的二进制文件,这是可以的,但我不是在寻找希望使用GUI界面操作的.app或.exe文件(例如,Oracle的appbundler不是什么我在这里寻找).

我用一种方法走了很远的路,但我不得不怀疑是否有更好的方法.

仅供参考:我已经尝试过的

我将在下面描述我的方法,但任何答案都不需要遵循这种方法.

我所做的是创建一个lein插件,调用makescript它生成一个uberjar,base64对它进行编码,然后将它放在一个所谓的heredoc变量的Ruby脚本中,如下所示:

# ...ruby script...
BASE64_JAR = <<-JAR_BOUNDARY
# [...base64 encoded file here...]
JAR_BOUNDARY
Run Code Online (Sandbox Code Playgroud)

然后,您应该能够运行ruby脚本.它将采用BASE64_JAR变量,取消编码,将其放在临时文件中,并通过调用执行它java -jar <filename>.

我使用这种方法的问题是Ruby的base64库和Clojureclojure.data.codec.base64库似乎产生了不同的字符串来表示jar,如果我使用Ruby,Clojure编码的字符串不能解码为原始文件.这可能与两种语言之间的字符串本身(与UTF-8相关?)的编码有关.以下是说明断开连接的repl/irb会话:

repl=> (def jar-contents (slurp "../target/myproj-0.1.0-SNAPSHOT-002-standalone.jar"))
repl=> (count jar-contents) ;; => 9433328
repl=> (def a-str (String. (clojure.data.codec.base64/encode (.getBytes jar-contents)) "UTF-8"))
repl=> (count a-str)        ;; => 23265576

irb> f = File.open("target/pwgen-0.1.0-SNAPSHOT-002-standalone.jar", "r").read()
irb> p f.length   # => …
Run Code Online (Sandbox Code Playgroud)

ruby java clojure

6
推荐指数
1
解决办法
1138
查看次数

从Haskell中的文件中挑选一条随机行

我试图让Haskell从文件中选择一个随机行并打印出来.我的尝试如下:

import Data.Random.Extras (choice)
main :: IO ()
main = do
  filecontents <- readFile "wordlist.txt"
  let words = lines filecontents
  let word = choice $ words
  word >>= putStrLn
Run Code Online (Sandbox Code Playgroud)

最后一行是发生错误的地方. >>=期待一个IO String,但是wordData.RVar.RVar String.(该变量称为"word",因为每行应该是一个单词.)

我已经阅读了RVar的文档,但经过一些黑客攻击后,我看不出如何解决我的问题.有任何想法吗?

我在安装Haskell平台OS X 10.9时使用ghc 7.6.3.

完整的错误如下:

[ 01:46 PM (51) integral:thoth ~/Source/pwgen ] > ghc -o pwgen pwgen.hs
[1 of 1] Compiling Main             ( pwgen.hs, pwgen.o )

pwgen.hs:40:3:
    Couldn't match type `Data.RVar.RVarT
                           Data.Functor.Identity.Identity'
                  with `IO'
    Expected type: IO String
      Actual …
Run Code Online (Sandbox Code Playgroud)

haskell

4
推荐指数
1
解决办法
451
查看次数

标签 统计

ruby ×3

clojure ×1

haskell ×1

java ×1

jruby ×1

random ×1

sublimetext ×1

sublimetext3 ×1

swift ×1