অর্গ ব্যাবেলে কোড-ব্লকের নির্দিষ্ট দোভাষী


13

কোড ব্লকের শীর্ষে বিভিন্ন অপশন নির্দিষ্ট করে একই ভাষায় দুটি কোড ব্লক একই ভাষায় থাকা যা দুটি দোভাষীগুলিতে বিভিন্ন দোভাষীগুলিতে চালিত হয়?


2
আপনি কি বোঝাতে চান, উদাহরণস্বরূপ, ইনস্টল করা সফ্টওয়্যারটির বিভিন্ন সংস্করণ, উদাহরণস্বরূপ পাইথন 26, পাইথন 27 এবং পাইথন 3? বা কেবল অদ্বিতীয় পাইথন সেশনগুলি, কিন্তু সমস্তগুলি একই নির্বাহযোগ্য ব্যবহার করছেন? @ ডিজিটেইডস পরবর্তীটি ব্যাখ্যা করে।
মানকফ

2
আমি ইনস্টল করা সফ্টওয়্যারটির বিভিন্ন সংস্করণ, অর্থাত্ বিভিন্ন নির্বাহী ব্যবহার করে।
cefstat

উত্তর:


10

মূল প্রশ্নটি কার্যকর করা একাধিক সংস্করণে চালিত উদ্বেগের জন্য পরিবর্তিত হয়েছে, এবং কেবল স্বাধীন দোভাষী নয়।

ব্যবহার করে find-libraryআমি এর উত্সটি পরিদর্শন করেছি ob-ruby, যার মধ্যে এই কোডটি রয়েছে:

(defvar org-babel-ruby-command "ruby"
  "Name of command to use for executing ruby code.")

পাইথন ব্যবহারের জন্য আমি অন্য কোথাও রেফারেন্স দেখেছি org-babel-python-command, তাই এটি অন্য কয়েকটি ভাষায় উপস্থিত রয়েছে, ob-$langদেখতে উপযুক্ত সমর্থনটি চেক করুন ।

এটি নিম্নলিখিতগুলিকে কাজ করতে দেয়:

#+begin_src emacs-lisp :results none
(setq org-babel-python-command "python3")
#+end_src

#+begin_src python :results output
import sys
print(sys.version)
#+end_src

#+RESULTS:
: 3.4.0 (default, Apr 11 2014, 13:05:11) 
: [GCC 4.8.2]

#+begin_src emacs-lisp :results none
(setq org-babel-python-command "python2")
#+end_src

#+begin_src python :results output
import sys
print(sys.version)
#+end_src

#+RESULTS:
: 2.7.6 (default, Mar 22 2014, 22:59:56) 
: [GCC 4.8.2]

এটি একত্রিত হতে পারে :session python3এবং :session python2প্রতিটি ব্লকের আগে এলিজপ কল এড়ানোর জন্য। দেখে মনে হচ্ছে এটি করার একটি সহজ উপায় থাকা উচিত।


2
একটি আছে org-babel-post-tangle-hook। কারওর এ বাস্তবায়ন করা উচিত org-babel-pre-tangle-hook
মানকফ

1
আমি ইন্টার্নালদের সাথে খুব বেশি পরিচিত নই, তবে আমি নিশ্চিত নই যে এই পরিবর্তনটি করার উপযুক্ত পর্যায়ে জটলা বাঁধবে? সত্যিই, মনে হচ্ছে ব্লকের কোনও :interpreterসম্পত্তি দরকার।
dgised

2
আমিও এর সাথে খুব বেশি পরিচিত নই। হ্যাঁ :interpreterবোঝা যায়। কিন্তু কোড ব্লকের org-babel-post-tangle-hookমাধ্যমে কোড সম্পাদনের পরে চলে C-c C-c। আমি ধরে নিই preকোড কার্যকর করার আগে চলবে। তবে আমি এখন উপলব্ধি করেছি যে যদি বৈশ্বিক পরিবর্তনশীল পরিবর্তন করা হয় তবে এর খারাপ পার্শ্ব প্রতিক্রিয়া হবে। :interpreterভালো হবে.
মানকফ

1
আপনার উত্তরগুলির জন্য আপনাকে @ ডিজিটেইজড এবং @ ম্যানকফকে ধন্যবাদ। তারা আমাকে সঠিক দিকে নির্দেশ করল। এটি আমার ভুল ছিল যে আমি জাভাস্ক্রিপ্ট কোডটিতে আগ্রহী তা নির্দিষ্ট করেছিলাম না। আপনার উত্তরের ভিত্তিতে আমি একটি :interpreterবিকল্প যুক্ত করার সিদ্ধান্ত নিয়েছি org-babel-execute:js। তবে তারপরে উত্সটি দিয়ে org-babel-execute:jsদেখতে পেলাম যে ইতিমধ্যে একটি :cmdবিকল্প রয়েছে যা আমি যা চাই ঠিক তা করে। দুর্ভাগ্যক্রমে, :cmdসমস্ত ভাষার জন্য উপলভ্য নয় এবং আমি এর জন্য কোনও ডকুমেন্টেশনও পাইনি ob-jsতাই প্রাথমিকভাবে আমি আমার :cmdঅস্তিত্ব মিস করলাম ।
cefstat

@ এসফস্ট্যাট আমি উল্লেখ করেছি :cmd, তবে দেখে মনে হচ্ছে এটি কেবল দোভাষী দোষে যুক্তি যুক্ত করতে ব্যবহৃত হয়েছিল। :cmdভবিষ্যতে যাদের এই সমস্যা রয়েছে তাদের সমস্যা সমাধানের জন্য ব্যবহারের সম্পূর্ণ উদাহরণ দিয়ে আপনি নিজের প্রশ্নটির উত্তর দিতে পারেন?
dgised

1

আমি বিশ্বাস করি ডিফল্টরূপে প্রতিটি ব্লক একই ভাষা হলেও স্বতন্ত্র ইন্টারপ্রেটারে চলে। আচরণ কিছু ভাষার জন্য আলাদা হতে পারে। উদাহরণস্বরূপ, আমি নিশ্চিত নই যে ইমাস-লিসপ ব্লকগুলি সেশন সম্পত্তিটিকে সমর্থন করে।

#+BEGIN_SRC ruby
  a = "foo"
#+END_SRC

#+RESULTS:
: foo

#+BEGIN_SRC ruby
  a ||= "bar"
#+END_SRC

#+RESULTS:
: bar

#+BEGIN_SRC ruby :session foo
  a ||= "session foo"
#+END_SRC

#+RESULTS:
: session foo

#+BEGIN_SRC ruby :session foo
  a += " with bar"
#+END_SRC

#+RESULTS:
: session foo with bar

প্রথম দুটি ব্লক স্বতন্ত্র দোভাষী ব্যবহার করে তবে তৃতীয় এবং চতুর্থ ব্লক একটি সেশন ভাগ করে :foo, যাতে তারা একই দোভাষীকে মূল্যায়ন করে।


2
তাত্ত্বিক ক্ষেত্রে ভাল উত্তর, কিন্তু প্রশ্নের উত্তর দেয় না।
মানকফ

1

দেখা যাচ্ছে যে আরও প্রায় সব ভাষা অর্গ বাবেল দ্বারা সমর্থিত কোনও নির্দিষ্ট কোড-ব্লকের জন্য আলাদা দোভাষী ব্যবহার করার বিকল্প নেই। একটি উল্লেখযোগ্য ব্যতিক্রম (এবং যেটি আমার আগ্রহী) হ'ল জাভাস্ক্রিপ্ট। এই ক্ষেত্রে একটি :cmdবিকল্প ব্যবহার করতে পারেন ।

nodeভেরিয়েবলের সংজ্ঞা অনুসারে স্ট্যান্ডার্ড জেএস ইন্টারপ্রেটার org-babel-js-cmd। একটি পৃথক দোভাষী দ্বারা একটি নির্দিষ্ট কোড ব্লক চালানোর :cmdজন্য নিম্নলিখিত উদাহরণ হিসাবে বিকল্পটি পাস করুন ।

#+begin_src js :cmd "/usr/bin/osascript -l JavaScript"
app = Application.currentApplication()
app.includeStandardAdditions = true
app.say("Hello")
#+end_src
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.